您的位置:

Android进度条详解

一、进度条的介绍

进度条是Android提供的一种用于显示长时间操作正在进行的用户界面组件。当应用程序需要执行某项耗时操作且用户需要等待时,可以使用进度条来告知用户任务的进展情况。

Android提供了两种进度条的实现方式:ProgressBar和ProgressDialog。其中,ProgressBar是在应用程序中直接使用的,而ProgressDialog是在应用程序进行耗时操作时显示的一种对话框形式的进度条。

二、使用ProgressBar实现进度条

使用ProgressBar实现进度条非常简单,只需要在布局文件中定义一个ProgressBar即可。并且,ProgressBar提供了多种样式供开发者选择,如水平进度条、圆形进度条等。

1. 水平进度条

水平进度条示例代码:

        <ProgressBar
            android:id="@+id/progressBar_horizontal"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:progress="0"
            android:max="100"
            android:secondaryProgress="50"
            />

ProgressBar的常用属性:

  • style:样式
  • progress:进度
  • max:最大值
  • secondaryProgress:第二进度(用于显示进度条的另一个段)

2. 圆形进度条

圆形进度条示例代码:

        <ProgressBar
            android:id="@+id/progressBar_circular"
            style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            />

ProgressBar的样式属性可以设置为圆形进度条的样式@android:style/Widget.DeviceDefault.Light.ProgressBar.Large

3. 自定义进度条

除了以上提到的几种样式外,还可以自定义进度条的样式。示例代码:

        <ProgressBar
            android:id="@+id/progressBar_customized"
            style="@style/CustomProgressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            />

需要在styles.xml文件中定义自定义进度条的样式:

    <style name="CustomProgressBar" parent="@android:style/Widget.ProgressBar.Horizontal">
        <item name="android:progressDrawable">@drawable/custom_progressbar_drawable</item>
        <item name="android:minHeight">20dp</item>
        <item name="android:maxHeight">20dp</item>
    </style>

drawable文件夹内添加一个自定义进度条的XML文件custom_progressbar_drawable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:id="@android:id/background">
            <shape>
                <corners android:radius="5dp" />
                <solid android:color="#e3e3e3" />
            </shape>
        </item>
        <item android:id="@android:id/progress">
            <clip>
                <shape>
                    <corners android:radius="5dp" />
                    <solid android:color="#5CACEE" />
                </shape>
            </clip>
        </item>
    </layer-list>

示例效果图如下:

![image](https://user-images.githubusercontent.com/29174713/123745139-1e317580-d8f2-11eb-92a8-05e837ac45e2.png)

三、使用ProgressDialog实现进度条

ProgressDialog是一种对话框形式的进度条,通常用于表示应用程序正在执行耗时操作时,对用户进行提示。使用ProgressDialog实现进度条也非常简单,示例代码:

private ProgressDialog progressDialog;
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("正在加载中");
progressDialog.setMessage("请稍后...");
progressDialog.setCancelable(false);
progressDialog.show();

其中,setTitle()设置对话框的标题;setMessage()设置进度条下方的提示信息;setCancelable(false)设置进度条不可取消;show()显示对话框。需要注意的是,当执行完耗时操作后,需要使用dismiss()方法关闭ProgressDialog。

四、进度条的进阶功能

1. 进度条的动态设置

可以通过setProgress()方法来设置进度条的进度值,代码示例:

progressBar_horizontal.setProgress(50);

进度条的进度值可以通过getProgress()方法来获取,示例代码:

int progress = progressBar_horizontal.getProgress();

2. 进度条的动画效果

可以通过setInterpolator()方法来设置动画效果,示例代码:

progressBar_horizontal.setProgress(50);
progressBar_horizontal.setInterpolator(new LinearInterpolator());

Android提供了多种Interpolator类,包括线性插值器(LinearInterpolator)、加速插值器(AccelerateInterpolator)、减速插值器(DecelerateInterpolator)等。

3. 进度条的颜色修改

进度条的颜色可以通过修改XML文件中进度条的颜色来实现,示例代码:

    <ProgressBar
        android:id="@+id/progressBar_customized"
        style="@style/CustomProgressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:progressTint="@color/colorPrimaryDark"
        android:backgroundTint="@color/colorPrimary"
        />

其中,android:progressTint属性设置进度条的颜色,android:backgroundTint属性设置进度条的背景颜色。

4. 进度条的监听器

当进度条的值发生变化时,可以使用setOnSeekBarChangeListener()方法设置监听器,示例代码:

progressBar_horizontal.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        // 进度发生变化时执行的操作
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // 触摸进度条时执行的操作
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // 停止滑动时执行的操作
    }
});

需要注意的是,当进度发生变化时,回调函数onProgressChanged()会被触发。

五、总结

通过本文的介绍,我们可以看到Android提供了多种不同的进度条实现方式,开发者可以根据自己的需要来选择合适的进度条样式和功能,并且可以通过动态设置、动画效果、颜色修改、监听器等高级功能来进一步完善进度条的功能。