Android 环形进度条Demo
下面是效果图:
下面是主要代码:
/**
* 自定义环形进度条
* Created by Administrator on 2016/6/13.
*/
public class RoundProgressBar extends View {
// 画圆环的画笔
private Paint mRingPaint;
// 圆心x坐标
private int mXCenter;
// 圆心y坐标
private int mYCenter;
// 总进度
private int mTotalProgress = 100;
// 当前进度
private int mProgress = 0;
// 圆环宽度
private int mRingWidth = 50;
// 圆环半径
private int mRingRadius = 80;
// 圆环颜色
private int mRingColor = 0xFF00FF00;
public RoundProgressBar(Context context) {
super(context);
//初始化
init();
}
public RoundProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
//初始化
init();
}
public RoundProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//初始化
init();
}
/**
* 初始化
*/
private void init() {
// 新建画笔对象
mRingPaint = new Paint();
// 抗锯齿
mRingPaint.setAntiAlias(true);
// 设置画笔颜色
mRingPaint.setColor(mRingColor);
// 设置画笔样式(描边)
mRingPaint.setStyle(Paint.Style.STROKE);
// 设置画笔宽度
mRingPaint.setStrokeWidth(mRingWidth);
}
/**
* 画图
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
mXCenter = getWidth() / 2;
mYCenter = getHeight() / 2;
if (mProgress > 0) {
RectF oval = new RectF();
oval.left = (mXCenter - mRingRadius);
oval.top = (mYCenter - mRingRadius);
oval.right = mRingRadius * 2 + (mXCenter - mRingRadius);
oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);
canvas.drawArc(oval, -90, ((float) mProgress / mTotalProgress) * 360, false, mRingPaint);
}
}
/**
* 设置进度,更新 View
*/
public void setProgress(int progress) {
mProgress = progress;
// 在ui线程中使用
invalidate();
// 在非ui线程中使用
// postInvalidate();
}
}