From:http://blog.csdn.net/xiadik/article/details/41648181
package com.wangran.beautiful_girl_show.view; import com.wangran.beautiful_girl_show.view.photoview.PhotoView;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet; /**
* 可显示进度的ImageView
* @author 夏小川
*/
public class ProgressImageView extends ImageView {
private static final String TAG = "ProgressImageView";
private Context mContext;
public static final int FONT_SIZE = 14;
public static final int ROUND_WIDTH = 50;
public static final int STROKE_WIDTH = 7;
private int mFontSize;
private int mRoundWidth;
private int mStrokeWidth;
private Paint mPaint;
private boolean mShowProgress;
private int mProgress;
private float mTextY;
private int mCenterX;
private int mCenterY;
private int mRadius;
private RectF mOval; public ProgressImageView(Context context) {
super(context);
mContext = context;
} public ProgressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
} private void init() {
float scale = mContext.getResources().getDisplayMetrics().density; mFontSize = (int) (FONT_SIZE * scale);
mRoundWidth = (int) (ROUND_WIDTH * scale);
mStrokeWidth = (int) (STROKE_WIDTH * scale); mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(mFontSize); mCenterX = getWidth() / 2;
mCenterY = getHeight() / 2;
mRadius = mRoundWidth / 2; mTextY = mCenterY + mFontSize * 11.0f / 28; mOval = new RectF(mCenterX - mRadius, mCenterY - mRadius, mCenterX
+ mRadius, mCenterY + mRadius);
} public void onDraw(Canvas canvas) {
if (mShowProgress) {
if (mCenterX == 0 || mCenterY == 0) {
init();
}
// 画最外层的大圆环
mPaint.setColor(Color.DKGRAY);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
canvas.drawCircle(mCenterX, mCenterY, mRadius, mPaint); // 画进度百分比
mPaint.setStrokeWidth(0);
mPaint.setColor(Color.WHITE);
mPaint.setTypeface(Typeface.MONOSPACE);
mPaint.setTextAlign(Paint.Align.CENTER);
String progressStr = mProgress + "%";
canvas.drawText(progressStr, mCenterX, mTextY, mPaint); // 画圆环的进度
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setColor(Color.WHITE);
canvas.drawArc(mOval, 0, 360 * mProgress / 100, false, mPaint);
} else {
super.onDraw(canvas);
}
} public void startProgress() {
mShowProgress = true;
setProgress(0);
} public void setProgress(int progress) {
if (mShowProgress) {
mProgress = progress;
invalidate();
}
} public void closeProgress() {
mShowProgress = false;
}
}

Android自定义控件之圆形进度条ImageView的更多相关文章

  1. Android 自定义 View 圆形进度条总结

    Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

  2. android 自定义图片圆形进度条

    感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了. 代码如下. package com.etong.cpms.wi ...

  3. Android自定义控件系列之应用篇——圆形进度条

    一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...

  4. android 自定义控件——(四)圆形进度条

    ----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...

  5. Android 高手进阶,自己定义圆形进度条

    背景介绍 在Android 开发中,我们常常遇到各种各样绚丽的控件,所以,依靠我们Android本身所带的控件是远远不够的,许多时候须要我们自定义控件,在开发的过程中.我们公司遇到了一种须要自己写的一 ...

  6. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

  7. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明地址:http://blog.csdn.net/xiaanming/article/detail ...

  8. Android 带进度的圆形进度条

    最近项目有个需求,做带进度从下到上的圆形进度条. 网上查了一下资料,发现这篇博客写得不错http://blog.csdn.net/xiaanming/article/details/10298163 ...

  9. Qt自定义控件系列(一) --- 圆形进度条

    本系列主要使用Qt painter来实现一些基础控件.主要是对平时自行编写的一些自定义控件的总结. 为了简洁.低耦合,我们尽量不使用图片,qrc,ui等文件,而只使用c++的.h和.cpp文件. 由于 ...

随机推荐

  1. mark v1 SecurityConfig

    package cn.efunbox.cms.configuration; import cn.efunbox.afw.core.entity.ApiCode; import cn.efunbox.a ...

  2. jquery获取元素索引值index()

    jquery获取元素索引值index()方法实例. jquery获取元素索引值index()方法: jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 ...

  3. Atitit.注册跟个登录功能的实现attilax总结obo

    Atitit.注册跟个登录功能的实现attilax总结obo 1. 注册模块 2 1.1. 基本注册功能(用户名方式) 2 1.2. 动态ajax监测用户名重复 2 1.3. 注册手机验证 2 1.4 ...

  4. video标签常用属性及说明

    video标签常用属性(在标签内部使用) video常用API属性及方法(API属性是供JS调用的,不在video标签元素中直接使用)

  5. java 高精度 四则运算

    java的大数处理对于ACM中的大数来说,相当的简单啊: 整数的运算   BigInteger 小数的运算   BigDecimal 导入类: import java.util.Scanner; im ...

  6. vue 的调试工具

    转载自:http://www.cnblogs.com/lolDragon/p/6268345.html 安装 1.github下载地址:https://github.com/vuejs/vue-dev ...

  7. GPIO输出—使用固件库点亮LED

    为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植.在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 BoardSupp ...

  8. Extjs DateField Bug 当format为年月'Y-m',在当前月(30、31号)选择其他偶数月会乱跳的问题解决方案

    Ext.form.WMDateField = Ext.extend(Ext.form.DateField, { safeParse : function(value, format) { if (/[ ...

  9. 去除inline-block元素间间距的N种方法<转>

    一.现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,很简单的个例子: <input /> <input type="su ...

  10. 微信小程序 - dialog

    实现了 标题,内容和按钮设置,可动态设置按钮,以及按钮点击事件的回调 可作为component 使用 直接上代码 //遮罩的代码 <viewclass="uiComponent uiC ...