ProgressBar使用

進度條在項目中已經被廣泛使用,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版本的提升,也許系統樣式會有所變化,這裏不建議學習所有的系統樣式。系統樣式只需要學習兩種即可:圓形進度條和橫向進度條,即progressBarStyleprogressBarStyleHorizontal

(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的簡單實用了,等後期爲大家展示各種自定義進度條的案例吧。

[本章完...]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章