Android 自定义view实现倒计时圆形进度
时间: 2023-11-11 16:55:45 浏览: 49
要实现倒计时圆形进度,你可以创建一个自定义的 View,使用 Canvas 和 Paint 来绘制圆形和进度条。以下是一个示例代码:
```java
public class CountdownCircleView extends View {
private int maxProgress = 100; // 总进度
private int progress = 100; // 当前进度
private int circleColor = Color.GRAY; // 圆形颜色
private int progressColor = Color.BLUE; // 进度条颜色
private Paint circlePaint;
private Paint progressPaint;
public CountdownCircleView(Context context) {
super(context);
init();
}
public CountdownCircleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CountdownCircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
circlePaint = new Paint();
circlePaint.setAntiAlias(true);
circlePaint.setColor(circleColor);
progressPaint = new Paint();
progressPaint.setAntiAlias(true);
progressPaint.setColor(progressColor);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int viewWidth = getWidth();
int viewHeight = getHeight();
// 绘制圆形
int diameter = Math.min(viewWidth, viewHeight);
int radius = diameter / 2;
int centerX = viewWidth / 2;
int centerY = viewHeight / 2;
canvas.drawCircle(centerX, centerY, radius, circlePaint);
// 绘制进度条
RectF rectF = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
float sweepAngle = 360f * progress / maxProgress;
canvas.drawArc(rectF, -90, sweepAngle, true, progressPaint);
}
public void setMaxProgress(int maxProgress) {
this.maxProgress = maxProgress;
}
public void setProgress(int progress) {
this.progress = progress;
invalidate(); // 重新绘制
}
}
```
你可以将上述代码放入你的 Android 项目中,并在布局文件中使用 `CountdownCircleView`。