進度條在項目中已經被廣泛使用,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" />
效果如下:
爲什麼說默認樣式是progressBarStyle
呢?可以從源碼中可以看到。
ProgressBar的第二個構造方法就是初始化佈局所用到的,其中有個參數就是傳遞默認的樣式。(可能在低SDK版本中的默認樣式不是這樣的)
那麼它還有什麼樣式呢?
- progressBarStyleHorizontal:橫向進度條樣式
效果圖如下:
-
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的進度將具有不確定行,那麼圓形進度條將會不停的轉動,橫向進度條的進度也在不停的跳動。橫向進度條進度跳動效果如圖:
- 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)自定義樣式
效果如下:
代碼如下:
<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的簡單實用了,等後期爲大家展示各種自定義進度條的案例吧。
[本章完...]