淺析Android圓形進(jìn)度條ProgressBar如何實(shí)現(xiàn)固定進(jìn)度
探究
假設(shè)我們在xml中這樣寫:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".page.home.HomeFragment"> <ProgressBar android:indeterminate="false" android:id="@+id/pbStorage" android:progress="60" android:max="100" android:layout_width="100dp" android:layout_height="100dp"/> </FrameLayout>
按照預(yù)料的,上面的我們的進(jìn)度條應(yīng)該是圓形,且設(shè)置indeterminate屬性,應(yīng)該是固定了進(jìn)度,但實(shí)際效果如下:
進(jìn)度條是一直在轉(zhuǎn)動的
之后通過翻閱官方的文檔發(fā)現(xiàn),ProgressBar雖然提供了一個圓形和水平進(jìn)度條的樣式,但是圓形的樣式它不支持確定進(jìn)度
我們可以打開其內(nèi)置的theme來找到答案,如下的2個截圖
解決
那么我們應(yīng)該如何解決?很簡單,我們可以從參考上面的水平進(jìn)度條,設(shè)置對應(yīng)的drawable屬性即可解決
progressDrawable
:用于設(shè)置ProgressBar
的進(jìn)度條樣式??梢酝ㄟ^指定一個drawable資源來定義進(jìn)度條的外觀。通常用于顯示確定的進(jìn)度,即進(jìn)度會從0%到100%之間變化。indeterminateDrawable
:用于設(shè)置ProgressBar
在不確定進(jìn)度時的樣式。當(dāng)ProgressBar
處于不確定進(jìn)度(indeterminate)時,進(jìn)度條會顯示一個循環(huán)動畫,而不是固定的進(jìn)度。通過指定一個drawable資源,可以定義不確定進(jìn)度時的樣式。
當(dāng)我們設(shè)置Progressbar的 indeterminate
屬性的時候?yàn)閠rue,則ProgressBar使用 indeterminateDrawable
這個外觀,否則則使用 progressDrawable
這個外觀
于是我們可以自定義一個圓形的外觀drawable,名為 progress_bar_green.xml
(放在drawable資源目錄下),代碼如下:
<?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 android:innerRadiusRatio="3.5" android:shape="ring" android:useLevel="false" android:type="sweep" android:thicknessRatio="12.0"> <!-- 進(jìn)度條默認(rèn)底色 --> <solid android:color="#f2f2f2"/> </shape> </item> <item android:id="@android:id/progress"> <rotate android:pivotX="50%" android:pivotY="50%" android:fromDegrees="-90" android:toDegrees="-90"> <shape android:innerRadiusRatio="3.5" android:shape="ring" android:angle="0" android:type="sweep" android:thicknessRatio="12.0"> <!-- 進(jìn)度條顏色 --> <solid android:color="#33cf59"/> </shape> </rotate> </item> </layer-list>
PS: 如果想要進(jìn)度條的圓環(huán)寬度變小,可以將 thicknessRatio
屬性調(diào)大,如果2個thicknessRatio的數(shù)值不一致,則是出現(xiàn)下面這種效果,看需求自行調(diào)整
之后xml布局里使用此drawable:
<ProgressBar + style="@style/Widget.AppCompat.ProgressBar.Horizontal" + android:progressDrawable="@drawable/progress_bar_green" + android:indeterminate="false" android:id="@+id/pbStorage" android:progress="60" android:max="100" android:layout_width="100dp" android:layout_height="100dp"/>
這里發(fā)現(xiàn)必須要使用 Widget.AppCompat.ProgressBar.Horizontal
這個樣式才能使我們的progressDrawable屬性生效,猜測是ProgressBar內(nèi)部或者Android系統(tǒng)內(nèi)部應(yīng)該是固定ProgressBar那個圓形默認(rèn)樣式為不確定(且不允許設(shè)置為確定進(jìn)度)
具體原因就不深究了,有興趣的讀者可以研究研究,在評論區(qū)回復(fù)告知我 ??
參考
android實(shí)現(xiàn)圓形的ProgressBar停止轉(zhuǎn)動_progressbar禁止轉(zhuǎn)動
到此這篇關(guān)于淺析Android圓形進(jìn)度條ProgressBar如何實(shí)現(xiàn)固定進(jìn)度的文章就介紹到這了,更多相關(guān)Android ProgressBar固定進(jìn)度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
AsyncTask陷阱之:Handler,Looper與MessageQueue的詳解
本篇文章是對Handler,Looper與MessageQueue進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Android 利用方向傳感器實(shí)現(xiàn)指南針具體步驟
Android利用方向傳感器實(shí)現(xiàn)指南針功能,聽起來還不錯吧,下面與大家分享下具體的實(shí)現(xiàn)步驟,感興趣的朋友可以參考下哈2013-06-06Webview實(shí)現(xiàn)android簡單的瀏覽器實(shí)例代碼
這篇文章主要介紹了Webview實(shí)現(xiàn)android簡單的瀏覽器實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-02-02Android TextView(圓?。┻吙蚝捅尘皩?shí)例詳解
這篇文章主要介紹了 Android TextView(圓?。┻吙蚝捅尘皩?shí)例詳解的相關(guān)資料,這里提供了實(shí)現(xiàn)代碼和實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-11-11Android項(xiàng)目實(shí)戰(zhàn)之仿網(wǎng)易新聞的頁面(RecyclerView )
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)之仿網(wǎng)易新聞的頁面,ViewPager作為RecyclerView的Header,感興趣的小伙伴們可以參考一下2016-01-01Android UI設(shè)計(jì)系列之自定義DrawView組件實(shí)現(xiàn)數(shù)字簽名效果(5)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義DrawView組件實(shí)現(xiàn)數(shù)字簽名效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android DragVideo實(shí)現(xiàn)播放視頻時任意拖拽的方法
這篇文章主要介紹了Android DragVideo實(shí)現(xiàn)播放視頻時任意拖拽的方法的相關(guān)資料,一種在播放視頻時,能夠拖拽的方案,需要的朋友可以參考下2016-12-12