Android開發自學筆記(Android Studio)—4.5 ProgressBar及其子類


一、前言

ProgressBar本身代表了進度條組件,它還派生出了兩個常用的組件:SeekBar和RatingBar,他們的使用方法類似,只是顯示界面有一定的區別。我們看一下API文檔中的說明:

從圖中我們是可以直接看到ProgressBar繼承自View類,直接子類有AbsSeekBar和ContentLoadingProgressBar,間接子類有RatingBar和SeekBar。下面依次介紹一下這幾個控件的使用方法。

二、ProgressBar

ProgressBar是界面用於與用戶交互的一個組件,用來提升用戶友好度,通常用於向用戶展示某個耗時操作時,用於展示完成的百分比,不至於讓用戶覺得程序失去了響應。在API文檔中,我們看到他所支持的XML屬性有如下:

xml屬性名稱 說明
android:animationResolution 動畫超時時間,必須是整數值,比如“100”
android:indeterminate 該屬性設置為true,表示不精確顯示進度
android:indeterminateBehavior 設置當選擇不精確顯示進度時,如何描述到達最大值
android:indeterminateDrawable 設置當選擇不精確顯示進度時,所繪制的drawable對象
android:indeterminateDuration 設置不精確顯示進度的持續時間
android:indeterminateOnly 設置只采用不精確顯示進度模式(狀態保持模式將不會工作)
android:interpolator  
android:max 設置進度可以達到的最大值
android:maxHeight 可選參數 設置View的最大高度
android:maxWidth 可選參數 設置View的最大寬度
android:minHeight 可選參數 設置View的最小高度
android:minWidth 可選參數 設置View的最小寬度
android:mirrorForRtl 定義如果是否需要反映在RTL模式的相關畫板,默認為false
android:progress 設置該進度已完成的進度值
android:progressDrawable 設置該進度條軌道對應的drawable對象
android:secondaryProgress 二級進度條,主要用於緩存使用的場景

該表格取自API19文檔

進度條支持多種風格,可以直接通過設置style屬性來設置,API中也給出了如下的屬性:

另外一種使用方式就是可以使用系統的ATT屬性例如:

  • style="?android:attr/progressBarStyle" 
  • style="?android:attr/progressBarStyleHorizontal" 
  • style="?android:attr/progressBarStyleInverse" 
  • style="?android:attr/progressBarStyleLarge" 
  • style="?android:attr/progressBarStyleLargeInverse" 
  • style="?android:attr/progressBarStyleSmall" 
  • style="?android:attr/progressBarStyleSmallInverse" 
  • style="?android:attr/progressBarStyleSmallTitle"  

例如如下的代碼:

對於瘋狂講義3上的示例,我實際操作並沒有成功,自定義進度條雖然按照書上的示例操作, 但是顯示上兩個圖標重疊,並不能按照進度情況顯示,代碼如下:

而顯示效果卻是:

而在實際運行效果也是后台的模擬線程在更新UI上也是沒有按照預想的結果執行,一開始顯示的都是底部紅色圖片,一直不動,然后一下全更新成這種重疊圖片了。

找了半天原因也不知道哪里出了問題,這個問題暫時記錄一下,等抽空再解決。(API22的模擬器出現的顯示問題)

網上找了進度條的示例,感覺也不是很完整,學起來不是很系統,想想android自帶的sdk中有示例,就把它找出來了,我們先看一下效果:

示例的位置在&AndroidSDK&\samples\android-19\legacy\ApiDemos\src\com\example\android\apis\view 這個文件夾下,可以看到

這4個JAVA文件,就是對應的4個進度條代碼。

而對應的布局文件可以向上級res文件夾下去找。代碼這里不再附上了。自己去找DEMO吧,我承認這個,我學的有點郁悶,標記一下。

三、SeekBar

SeekBar是滑動條,他與進度條的不同時一般進度條都是用顏色填充進度,而滑動條則是用滑塊表示進度數值,而且允許用戶通過拖動滑塊來改變數值,例如Windows的音量調節:

就是一個滑動條。滑塊的樣式則是通過 android:thumb 屬性來指定。

下面做一個簡單的小例子,顯示結果就是在textView上顯示拖動滑塊改變的值。

簡單的效果:

獲取拖動的值需要設置他的  setOnSeekBarChangeListener  這個監聽器,重寫他的方法。上方右邊的示例則是自定義了他的滑道,代碼在下面一塊給出。

首先給出滑道的樣式定義(progress_drawable.xml):

下面是示例主頁面的樣式布局:

如果想模仿windows的調整音量的滑塊,只需要在內部的線性布局的最前面再加個ImageView就可以做出差不多的效果。

這是后台代碼,主要是監聽器的實現。

這些只是SeekBar的基本用法,當然也可以多種實現,如下是在網上看到的網友做的效果:

四、RatingBar

星級評分條,其實也是一種拖動條,只是與拖動條的區別在於它提供星星來表示進度。常見的屬性如下:

屬性 說明
android:isIndicator 設置該星級評分是否允許用戶該表(true為不允許改變)
android:numStars 設置該星級評分條總共有多少星星
android:rating 設置該星級評分條默認的星級
android:stepSize 設置每次最少需要改變多少個星級

我們來做一個簡答的例子來演示這些屬性:

同樣先看一下效果:

然后我們給出布局文件:

其中max和progress是進度條中的屬性,因為RatingBar本身就是一個特殊的進度條,設置了最大值是100,5顆星顯示,說明一顆星是20,步進0.5,說明一次至少可以選擇半顆星。

后台主要是處理了改變時的監聽器。

五、后記

最近雜事繁多,學習的進度減慢了,遇到問題也卡了很久,有些問題需要多深入的學習一下,多看看SDK中的示例和API文檔。下面的章節會跳過一些簡單控件的使用,給出SDK中示例代碼的位置。不再在博客上浪費空間了。加快學習進度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM