一起Talk Android吧(第五百四十二回:无进度值ProgressBar)
文章目录
- 概念介绍
- 使用资源文件实现
- 使用默认设置
- 修改风格
- 使用动画资源
- 使用代码实现
- 经验总结
各位看官们大家好,上一回中咱们说的例子是"ProgressBar总结",本章回中介绍的例子是" 无进度值ProgressBar"。闲话休提,言归正转,让我们一起Talk Android吧!
概念介绍
我们在这里说的无进度值ProgressBar
表示进度条从0开始一直变化到最大值,然后反复循环。这种情况用在一些没有具体进度值的过程中,比如搜索无线网络。本章回中我们将介绍如何使用无进度值ProgressBar.
使用资源文件实现
使用默认设置
我们在布局中直接使用默认的进度条,它会产生一个绿色的圆形进度条,示例代码如下:
<ProgressBar
android:layout_width="match_parent"
android:layout_height="60dp">
</ProgressBar>
该代码的运行效果如下:
我们也可以把圆形的进度条换成水平的,它会产生一个绿色的矩形进度条代码如下:
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:indeterminate="true"
android:layout_width="match_parent"
android:layout_height="60dp">
</ProgressBar>
注意代码中打开了indeterminate
属性,这样才能有反复循环的效果。下面是程序运行的效果图:
修改风格
默认的进度条颜色为绿色(与App的主题有关),我们可以通过修改indeterminateDrawable
的属性值来修改它的颜色,示例代码如下:
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/progress_bar_indeterminate"
android:layout_width="match_parent"
android:layout_height="60dp">
</ProgressBar>
<!-- progress_bar_indeterminate.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="6dp" />
<gradient
android:startColor="#33FFFFFF"
android:centerColor="#33FFFFFF"
android:centerX="0.75"
android:endColor="#33FFFFFF"
android:angle="0"
/>
</shape>
</item>
<!-- 第二进度条 -->
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="6dp" />
<gradient
android:startColor="#33FFFFFF"
android:centerColor="@color/white"
android:centerX="0.75"
android:endColor="#33FFFFFF"
android:angle="0"
/>
</shape>
</clip>
</item>
<!-- 前景进度条-->
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="6dp" />
<gradient
android:startColor="@color/white"
android:centerColor="#F3A32C"
android:centerX="0.5"
android:endColor="#ff0000"
android:angle="0"
/>
</shape>
</clip>
</item>
</layer-list>
代码中的颜色是参考默认配色修改的,我们将其修改成了白色->橙色->红色这样的渐变色,此外,为了突出白色和透明色的进度条背景,我们把布局文件的背景修改成了蓝色,下面是该程序的运行效果:
使用动画资源
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/line_animation_list"
android:layout_width="match_parent"
android:layout_height="60dp">
</ProgressBar>
示例代码和上的一样,只是indeterminateDrawable
的属性值变成了line_animation_list
,这是一个动画文件,该动画文件也是参考源代码文件修改的,只是使用了自已的配色,详细的内容将在后面的章回中介绍。下面是程序的运行效果图:
使用代码实现
在布局文件中给progressBar
设置最大进度值为100,同时不设置indeterminate
和indeterminateDrawable
属性,在代码中不断地修改它的进度值,示例代码如下:
private ProgressBar mProgressBar;
private int value = 0;
private class SubHandler extends Handler {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(value == 100) {
value %= 100;
}
mProgressBar.setProgress(value);
value++;
mSubHandler.sendMessage(message);
}
}
这里的核心思路在于进度条的最大进度值为100,每次更新完进度值后把进度值加1,当进度值到达100后将其通过取模恢复为0。注意更新进度值需要通过Handler
来进行。
经验总结
实现无进度值进度条有两种方法:
- 通过资源文件实现;
- 通过代码实现;
使用资源文件实现时需要配置indeterminate
和indeterminateDrawable
属性。前者表示无限循环,后者用来设置进度条的风格,设置风格有两种:一种是layer-list
包含的图层文件,一种是animation-list
包含的动画文件。不过这两种文件都属性drawable文件。
使用代码文件实现时需要配置max
属性,然后在代码中通过Handler
修改进度值。至于进度条的风格可以通过progressDrawable
属性来设置。这个属性参考上一回中的内容就可以。
看官们,关于"无进度值ProgressBar"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!