Android 加载圆形进度

在Android应用程序中,加载数据时常常需要提供一个视觉上的加载进度指示,以告知用户当前操作正在进行中。其中,圆形进度条是一种常见且直观的加载指示器。本文将介绍如何在Android应用程序中实现一个加载圆形进度条,并提供相应的代码示例。

圆形进度条的实现

使用ProgressBar

Android中的ProgressBar可以用来展示加载进度,我们可以通过自定义样式来实现圆形的加载进度条。下面是一个简单的示例代码:

<ProgressBar
    android:id="@+id/progress_bar"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

在Activity或Fragment中,我们可以通过findViewById找到ProgressBar实例,并设置相关属性:

ProgressBar progressBar = findViewById(R.id.progress_bar);
progressBar.setIndeterminate(true); // 设置为不确定模式,即循环加载

自定义圆形进度条

除了使用系统提供的ProgressBar外,我们还可以自定义圆形进度条。下面是一个简单的自定义View的示例代码:

public class CircleProgressBar extends View {
    private Paint mPaint;
    private RectF mRectF;
    private float mProgress;

    // 构造方法
    public CircleProgressBar(Context context) {
        this(context, null);
    }

    public CircleProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setColor(Color.BLUE);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(10);
        mRectF = new RectF();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int width = getWidth();
        int height = getHeight();
        int radius = Math.min(width, height) / 2 - 10;
        mRectF.set(width / 2 - radius, height / 2 - radius, width / 2 + radius, height / 2 + radius);
        canvas.drawArc(mRectF, -90, 360 * mProgress, false, mPaint);
    }

    // 设置加载进度
    public void setProgress(float progress) {
        mProgress = progress;
        invalidate();
    }
}

在布局文件中添加自定义View:

<com.example.CircleProgressBar
    android:id="@+id/circle_progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

在Activity或Fragment中,我们可以通过findViewById找到CircleProgressBar实例,并设置加载进度:

CircleProgressBar circleProgressBar = findViewById(R.id.circle_progress_bar);
circleProgressBar.setProgress(0.5f); // 设置加载进度为50%

类图

下面是CircleProgressBar的类图:

classDiagram
    CircleProgressBar -- View : 继承
    CircleProgressBar : - Paint mPaint
    CircleProgressBar : - RectF mRectF
    CircleProgressBar : - float mProgress
    CircleProgressBar : + CircleProgressBar(Context context)
    CircleProgressBar : + CircleProgressBar(Context context, AttributeSet attrs)
    CircleProgressBar : + void onDraw(Canvas canvas)
    CircleProgressBar : + void setProgress(float progress)

结语

通过本文的介绍,我们学习了在Android应用程序中实现加载圆形进度条的两种方法:使用系统的ProgressBar和自定义View。无论使用哪种方法,都可以根据实际需求定制出符合项目风格的加载指示器。希望本文对您有所帮助,谢谢阅读!