Android 圆形进度条实现指南:自定义 View 实现
在 Android 上实现圆形进度条,可以按照以下步骤进行:
-
创建一个自定义的 View 类,继承自 View 或者 ProgressBar 类。让我们称之为 CircularProgressBar。
-
在 CircularProgressBar 类中,定义一些必要的属性,比如进度条的颜色、背景色、宽度、进度值等。
-
重写 onMeasure() 方法,设置 CircularProgressBar 的尺寸。
-
重写 onDraw() 方法,在画布上绘制圆形背景和进度条。
-
处理进度变化的方法,比如 setProgress(),用于更新进度条的进度值。
以下是一个简单的 CircularProgressBar 类的示例代码:
public class CircularProgressBar extends View {
private int progress;
private int backgroundColor;
private int progressColor;
private int strokeWidth;
public CircularProgressBar(Context context) {
super(context);
init();
}
public CircularProgressBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
// 初始化属性
progress = 0;
backgroundColor = Color.GRAY;
progressColor = Color.BLUE;
strokeWidth = 10;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 设置 CircularProgressBar 的尺寸
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
setMeasuredDimension(size, size);
}
@Override
protected void onDraw(Canvas canvas) {
// 在画布上绘制圆形背景和进度条
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int radius = Math.min(width, height) / 2;
// 绘制背景
Paint backgroundPaint = new Paint();
backgroundPaint.setColor(backgroundColor);
backgroundPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(width / 2, height / 2, radius, backgroundPaint);
// 绘制进度条
Paint progressPaint = new Paint();
progressPaint.setColor(progressColor);
progressPaint.setStyle(Paint.Style.STROKE);
progressPaint.setStrokeWidth(strokeWidth);
progressPaint.setStrokeCap(Paint.Cap.ROUND);
RectF progressRect = new RectF(strokeWidth, strokeWidth,
width - strokeWidth, height - strokeWidth);
float sweepAngle = 360 * progress / 100f;
canvas.drawArc(progressRect, -90, sweepAngle, false, progressPaint);
}
public void setProgress(int progress) {
// 更新进度值
this.progress = progress;
invalidate();
}
}
你可以在你的 Android 项目中使用这个 CircularProgressBar 类。通过设置进度值来更新进度条,比如调用 circularProgressBar.setProgress(50); 来设置进度条的进度为 50%。记得在布局文件中使用 <your.package.name.CircularProgressBar> 标签来引用该自定义 View。
原文地址: https://www.cveoy.top/t/topic/N6k 著作权归作者所有。请勿转载和采集!