@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画背景圆环
int center = getWidth() / 2;
float radius = center - roundWidth / 2;
paint.setColor(roundColor);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(roundWidth); // 圆环的宽度
paint.setAntiAlias(true);
canvas.drawCircle(center,center,radius,paint);
// 画进度百分比
paint.setColor(textColor);
paint.setStrokeWidth(0);
paint.setTextSize(textSize);
paint.setTypeface(Typeface.DEFAULT_BOLD);
int percent = (int)(progress / (float)max * 100);
String strPercent = percent + "%";
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
if(percent != 0){
canvas.drawText(strPercent, getWidth() / 2 - paint.measureText(strPercent) / 2 ,
getWidth() / 2 +(fm.bottom - fm.top)/2 - fm.bottom, paint);
}
// 画圆弧
RectF oval = new RectF(center - radius, center - radius,
center + radius, center + radius);
paint.setColor(roundProgressColor);
paint.setStrokeWidth(roundWidth);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawArc(oval, 0 , 360 * progress / max, false, paint);
}
public void setProgress(int progress){
if(progress < 0 ){
throw new IllegalArgumentException("进度Progress不能小于0");
}
if(progress > max){
progress = max;
}
if(progress <= max){
this.progress = progress;
postInvalidate();
}
}
圆形进度条实现方案
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1、重写UITextField子类的drawRect方法 - (void)drawRect:(CGRect)rec...