进度条在项目中已经被广泛使用,Android原生的进度条控件是ProgressBar,这个控件必须要了解的,但是一般我们很少会直接使用原生控件,为了美观,一般都会自定义一个进度条。本章的重点不是自定义进度条,而是了解原生控件ProgressBar的基本使用。
首先,第一个需要讲解的是ProgressBar样式,也是本章最重要的知识。
(1)系统样式
ProgressBar的默认样式是progressBarStyle(圆形进度条)
,写法如下:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
效果如下:
31.gif为什么说默认样式是progressBarStyle
呢?可以从源码中可以看到。
ProgressBar的第二个构造方法就是初始化布局所用到的,其中有个参数就是传递默认的样式。(可能在低SDK版本中的默认样式不是这样的)
那么它还有什么样式呢?
- progressBarStyleHorizontal:横向进度条样式
效果图如下:
图片.png-
progressBarStyleInverse:反转圆形进度条
style="?android:attr/progressBarStyleInverse"
这个目前设置之后没有达到反转的效果。(就不再调查原因了)
-
progressBarStyleLarge:大型圆形进度条
style="?android:attr/progressBarStyleLarge"
就是比正常的要大一些。
-
progressBarStyleLargeInverse:大型反转圆形进度条
style="?android:attr/progressBarStyleLargeInverse"
这个同样没有看到反转效果。(就不再调查原因了)
-
progressBarStyleSmall:小型圆形进度条
style="?android:attr/progressBarStyleSmall"
-
progressBarStyleSmallInverse:小型反转圆形进度条
style="?android:attr/progressBarStyleSmallInverse"
这个同样没有看到反转效果。(就不再调查原因了)
-
progressBarStyleSmallTitle:标题栏进度条
style="?android:attr/progressBarStyleSmallTitle"
-
Widget.AppCompat.ProgressBar:默认进度条(圆形进度条)
style="@style/Widget.AppCompat.ProgressBar"
-
Widget.AppCompat.ProgressBar.Horizontal:横向进度条
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
以上就是所有的系统样式了,需要注意的是,随着Android SDK版本的提升,也许系统样式会有所变化,这里不建议学习所有的系统样式。系统样式只需要学习两种即可:圆形进度条和横向进度条,即progressBarStyle
和progressBarStyleHorizontal
。
(2)ProgressBar的常用属性
- indeterminate:设置进度条的进度是否不确定
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"/>
或
progressBar.setIndeterminate(true);
也就是说,如果indeterminate设置为true,那么ProgressBar的进度将具有不确定行,那么圆形进度条将会不停的转动,横向进度条的进度也在不停的跳动。横向进度条进度跳动效果如图:
32.gif- indeterminateBehavior:定义当进度达到最大时,不确定模式的表现;该值必须为repeat或者cycle,repeat表示进度从0重新开始;cycle表示进度保持当前值,并且回到0
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:indeterminateBehavior="cycle"/>
这个属性貌似也没有效果。
-
indeterminateDuration:设置进度不确定进度条的动画时间
-
indeterminateOnly:限制为不定模式
-
interpolator:设置动画的插值器
-
max:设置最大进度
-
min:设置最小进度
-
maxHeight:设置最大高度
-
miniHeight:设置最小高度
-
maxWidth:设置最大宽度
-
minWidth:设置最小宽度
-
progress:设置当前进度
-
secondaryProgress:设置二级进度值
-
progressDrawable:设置进度条的背景
-
mirrorForRtl:定义了相关画板如果需要反映在RTL模式
以上就是ProgressBar的常用属性了,但是,部分属性已经失效了,当Android SDK的版本迭代中,还不清楚有多少属性将失去作用,但ProgressBar的样式应该不会失去作用,为了使ProgressBar更加美观,可以从ProgressBar的样式入手。
(3)自定义样式
效果如下:
33.gif代码如下:
<ProgressBar
android:id="@+id/progressBar"
style="@style/MyProgressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
MyProgressBar
<style name="MyProgressBar" parent="@android:style/Widget.ProgressBar.Horizontal">
<item name="android:maxHeight">50dip</item>
<item name="android:minHeight">10dip</item>
<item name="android:indeterminateOnly">false</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
<item name="android:progressDrawable">@drawable/progressbar_bg</item>
</style>
progressbar_bg.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="5dip" />
<gradient
android:angle="0"
android:endColor="#00000000"
android:startColor="#ff00ff" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<scale
android:scaleWidth="100%"
android:drawable="@drawable/progressbar_shape"/>
</clip>
</item>
</layer-list>
progressbar_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dip" />
<gradient
android:angle="0"
android:endColor="#0BDB14"
android:startColor="#5EB962" />
</shape>
以上就是ProgressBar的简单实用了,等后期为大家展示各种自定义进度条的案例吧。
[本章完...]
网友评论