這兩天有個需求,點擊按鈕從SD卡解壓壓縮包,並讀取壓縮包內txt文檔內容,然后在街面上顯示出來。畢竟IO操作很耗時,如果文件較大會花費不少時間。所以,在處理數據的時候能給個進度就好了。我們通常的做法就是,點擊按鈕后彈出一個加載框或者加載進度條,等數據處理結束后,再讓對話框消失。
但是現在的需求是,用一個布局,左側顯示刷新列表,右側顯示ProgressBar。那么問題來了,ProgressBar顯示的很大,而且打開后就一直在轉動,無法控制。那么就來解決這兩個問題吧~

第一個問題:控制ProgressBar的大小和樣式
首先,創建一個style樣式,設置寬高和圖片,具體如下:
<style name="ProgressCircle"> <item name="android:indeterminateDrawable">@drawable/ic_refresh_grey_600_24dp</item> <item name="android:minWidth">25dp</item> <item name="android:minHeight">25dp</item> <item name="android:maxWidth">60dp</item> <item name="android:maxHeight">60dp</item> </style>
然后,寫一個xml文件progressbar_circle.xml,設置ProgressBar的轉動效果。
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_refresh_grey_600_24dp" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"> </rotate>
到這里,大小固定,轉動效果也有了。
第二個問題:手動控制轉動的開始和停止
開始的時候,設置setIndeterminateDrawable和setProgressDrawable為定義的xml文件,即可開始轉動。
結束的時候,設置setIndeterminateDrawable和setProgressDrawable為固定的圖片,即可停止轉動。
/** * 開始刷新動畫 */ public void startRefresh() { progressbar_refresh.setIndeterminateDrawable(getResources().getDrawable( R.drawable.progressbar_circle)); progressbar_refresh.setProgressDrawable(getResources().getDrawable( R.drawable.progressbar_circle)); } /** * 停止刷新動畫 */ public void stopRefresh() { progressbar_refresh.setIndeterminateDrawable(getResources().getDrawable( R.drawable.ic_refresh_grey_600_24dp)); progressbar_refresh.setProgressDrawable(getResources().getDrawable( R.drawable.ic_refresh_grey_600_24dp)); }
以上。
