要实现弯曲的进度条,可以使用 Android 的 Canvas 绘图功能和 Path 类来绘制差不多的形状。

以下是一个简单的实现方式:

  1. 创建一个自定义 View 类
public class CurvedProgressBar extends View {
    private int progress = 0;
    private Paint paint;
    private Path path;
    private RectF rectF;

    public CurvedProgressBar(Context context) {
        super(context);
        init();
    }

    public CurvedProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CurvedProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.BLUE);

        path = new Path();
        rectF = new RectF();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getWidth();
        int height = getHeight();

        // 计算圆心坐标和半径
        int cx = width / 2;
        int cy = height / 2;
        int radius = Math.min(width, height) / 2 - 10;

        // 计算起始和结束角度
        int startAngle = 180;
        int sweepAngle = (int) (360 * ((float) progress / 100));

        // 使用 Path 绘制曲线形状
        path.reset();
        rectF.set(cx - radius, cy - radius, cx + radius, cy + radius);
        path.arcTo(rectF, startAngle, sweepAngle, true);
        path.lineTo(cx, cy);
        path.close();

        // 绘制 Path
        canvas.drawPath(path, paint);
    }

    public void setProgress(int progress) {
        this.progress = progress;
        invalidate();
    }
}
  1. 在布局文件中添加自定义 View
<com.example.myapplication.CurvedProgressBar
    android:id="@+id/progress_bar"
    android:layout_width="200dp"
    android:layout_height="200dp" />
  1. 在 Activity 中使用自定义 View
CurvedProgressBar progressBar = findViewById(R.id.progress_bar);
progressBar.setProgress(50);

以上代码实现了一个简单的弯曲进度条,当设置进度为 50 时,会绘制一个半圆形状的进度条。你可以根据需要调整颜色、粗细等绘制参数,或者添加动画效果来增强交互体验。

Android 自定义弯曲进度条实现

原文地址: https://www.cveoy.top/t/topic/ozkz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录