1.设置:progressBar.setProgressDrawable();
java
/**
* 圆形进度条
* @return
*/
private Drawable createCircleProgressDrawable() {
// 2. 使用自定义 Drawable 实现圆环
return new Drawable() {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// 1. 定义圆环厚度
final float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
@Override
public void draw(Canvas canvas) {
Rect bounds = getBounds();
float centerX = bounds.centerX();
float centerY = bounds.centerY();
// 计算半径,留出画笔粗细的一半防止被裁剪
float radius = (Math.min(bounds.width(), bounds.height()) - strokeWidth) / 2;
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(strokeWidth);
// 【关键:设置圆角切口】
paint.setStrokeCap(Paint.Cap.ROUND);
// 1. 画背景圆环(浅灰色)
paint.setColor(Color.parseColor("#33FFFFFF"));
canvas.drawCircle(centerX, centerY, radius, paint);
int level = getLevel();
// 2. 画进度弧线
if (level <= 2000) {//20%
paint.setColor(Color.parseColor("#FFD700"));//黄色
} else {
paint.setColor(Color.parseColor("#4CAF50"));//绿色
}
// getLevel() 范围是 0-10000
float sweepAngle = (level / 10000f) * 360f;
RectF oval = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
// 从 270 度(12点钟方向)开始顺时针绘制
canvas.drawArc(oval, 270, sweepAngle, false, paint);
}
@Override
protected boolean onLevelChange(int level) {
invalidateSelf(); // 当 ProgressBar 调用 setProgress 时,level 会变,触发重绘
return true;
}
@Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
paint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
};
}