自定义圆形进度条
public class ProgressCircle extends View {
private Context mContext;
private Paint mPaint;
private DecimalFormat df = new DecimalFormat("0.00");//格式化小数
private final int lineLen = 20; //线长
private int radius = 0; //圆半径
private final int padding = 15;//圆与横线的间距
private int lineStartY = 30; //线的起点Y
private int lineStopY = lineStartY + lineLen;//线的终点Y
private final int maxProgress = 120; //总进度值
private int progress = 0; //进度值
private final int rotate = 360 / maxProgress; //绘制线的旋转角度
private int progressColor = Color.RED; //已完成的进度颜色值
private String percent = "0%";
public ProgressCircle(Context context) {
this(context,null);
init(context);
}
public ProgressCircle(Context context, AttributeSet attrs) {
this(context, attrs,0);
init(context);
}
public ProgressCircle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context){
this.mContext = context;
mPaint = new Paint();
mPaint.setAntiAlias(true);
}
public int getProgress() {
return progress;
}
public int getMaxProgress() {
return maxProgress;
}
public String getPercent() {
return percent;
}
//设置进度值
public void setProgress(int progress) {
if(progress < 0){
this.progress = 0;
}else if(progress >= maxProgress){
this.progress = maxProgress;
}else{
this.progress = progress;
}
percent = df.format(this.progress * 100.0 / maxProgress) + "%";
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
int centerX = getMeasuredWidth()/2;
int centerY = getMeasuredHeight()/2;
radius = centerX > centerY ? (centerY - (lineLen + padding) * 2) : (centerX - (lineLen + padding) * 2);
canvas.save();
mPaint.setStrokeWidth(5);
mPaint.setColor(Color.parseColor("#D5D5D5"));
for(int i = 0; i< maxProgress; i++){
if(i < progress){
mPaint.setColor(progressColor);
}else{
mPaint.setColor(Color.parseColor("#D5D5D5"));
}
canvas.drawLine(centerX, lineStartY, centerX, lineStopY, mPaint);
canvas.rotate(rotate, centerX, centerY);
}
canvas.restore();
mPaint.setColor(Color.parseColor("#247ACB"));
canvas.drawCircle(centerX, centerY, radius, mPaint);
String str = "进度百分比";
mPaint.setTextSize(30);
float txtLength = mPaint.measureText(str);
mPaint.setColor(Color.WHITE);
canvas.drawText(str, centerX- txtLength/2, centerY-50,mPaint);
mPaint.setTextSize(50);
float perLength = mPaint.measureText(percent);
canvas.drawText(percent,centerX- perLength/2,centerY+50,mPaint);
}
}