自定义CircularProgressBar
来源:互联网 发布:阿里云个人邮箱下载 编辑:程序博客网 时间:2024/06/05 06:19
public class CircularProgressBar extends View { private int mDuration = 100; private int mProgress = 30; private Paint mPaint = new Paint(); private RectF mRectF = new RectF(); private int mBackgroundColor = Color.LTGRAY; private int mPrimaryColor = Color.parseColor("#6DCAEC"); private float mStrokeWidth = 2F; /** * 进度条改变监听 * * {@link #onChange( int duration, int progress, float rate)} */ public interface OnProgressChangeListener { /** * 进度改变事件,当进度条进度改变,就会调用该方法 * @param duration 总进度 * @param progress 当前进度 * @param rate 当前进度与总进度的商 即:rate = (float)progress / duration */ public void onChange(int duration, int progress, float rate); } private OnProgressChangeListener mOnChangeListener; /** * 设置进度条改变监听 * @param l */ public void setOnProgressChangeListener(OnProgressChangeListener l) { mOnChangeListener = l; } public CircularProgressBar(Context context) { super(context); } public CircularProgressBar(Context context, AttributeSet attrs) { super(context, attrs); } /** * 设置进度条的最大值, 该值要 大于 0 * @param max */ public void setMax( int max ) { if( max < 0 ) { max = 0; } mDuration = max; } /** * 得到进度条的最大值 * @return */ public int getMax() { return mDuration; } /** * 设置进度条的当前的值 * @param progress */ public void setProgress( int progress ) { if( progress > mDuration ) { progress = mDuration; } mProgress = progress; if( mOnChangeListener != null ) { mOnChangeListener.onChange(mDuration, progress, getRateOfProgress()); } invalidate(); } /** * 得到进度条当前的值 * @return */ public int getProgress() { return mProgress; } /** * 设置进度条背景的颜色 */ public void setBackgroundColor( int color ) { mBackgroundColor = color; } /** * 设置进度条进度的颜色 */ public void setPrimaryColor( int color ) { mPrimaryColor = color; } /** * 设置环形的宽度 * @param width */ public void setCircleWidth(float width) { mStrokeWidth = width; } @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); int halfWidth = getWidth() / 2; int halfHeight = getHeight() /2; int radius = halfWidth < halfHeight ? halfWidth : halfHeight; float halfStrokeWidth = mStrokeWidth / 2; // 设置画笔 mPaint.setColor(mBackgroundColor); mPaint.setDither(true); mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(mStrokeWidth); mPaint.setStyle(Paint.Style.STROKE); //设置图形为空心 // 画背景 canvas.drawCircle(halfWidth, halfHeight, radius - halfStrokeWidth, mPaint); // 画当前进度的圆环 mPaint.setColor(mPrimaryColor); // 改变画笔颜色 mRectF.top = halfHeight - radius + halfStrokeWidth; mRectF.bottom = halfHeight + radius - halfStrokeWidth; mRectF.left = halfWidth - radius + halfStrokeWidth; mRectF.right = halfWidth + radius - halfStrokeWidth; canvas.drawArc(mRectF, -90, getRateOfProgress() * 360, false, mPaint); canvas.save(); } /** * 得到当前的进度的比率 * <p> 用进度条当前的值 与 进度条的最大值求商 </p> * @return */ private float getRateOfProgress() { return (float)mProgress / mDuration; }}
0 0
- 自定义CircularProgressBar
- CircularProgressBar - 以最简单的方式实现圆形ProgressBar
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义TexBox,自定义ComboBox
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义一个自定义对话框
- 自定义控件-自定义吐司
- 自定义checkbox,自定义button
- 自定义控件--自定义对话框
- 自定义控件----自定义属性
- 自定义控件:自定义Toast
- 细说JavaScript单线程的一些事
- 支付宝异步通知返回时cookie、session为什么会失效?
- bzoj1013---------算法模板系列(gauss消元)
- 关于SQL连接语句中的Integrated Security=SSPI/ture/false
- REST架构风格的由来&元素
- 自定义CircularProgressBar
- 彻底理解android中的内部存储与外部存储
- [golang] struct转JSON,解析JSON
- 常用加密算法笔记
- RecyclerView封装
- 2.8 Git 基础 - 总结
- Android中OrmLite数据库使用总结
- 持续集成之代码质量管理-Sonar [三]
- 如何搜索