透明進度條bug
我的透明進度條原理是不斷重繪一個背景圖片,然後使用Matrix旋轉圖片,原先的代碼是死循環,代碼如下:
protected Void doInBackground(Void... params) {
while( true ) {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
e.printStackTrace();
}
publishProgress();
}
return null;
}
這樣就有一個bug,因爲是死循環,當ProgressDialog被dismiss掉之後這個循環並不會銷燬,而是一直在循環,這樣造成的一個bug就是使用了透明進度條之後側滑菜單點擊就沒有反應了,並且,透明進度條在Activity下次啓動並不會有旋轉的效果,這裏修改的辦法是將這個while(true)改成用變量判斷:
while( mLoop )
然後重寫ProgressDialog的dismiss()方法:
public void dismiss() {
super.dismiss();
mProgressView.setLoop(false);
}
這樣在這個ProgressDialog被銷燬之後,將這個循環也關掉。
透明進度條在小米手機上顯示黑屏背景
這個透明進度條在使用了style去除背景之後在有些手機上顯示正常,但是在小米手機顯示黑屏:
經過一番排查,原先設置的那個主題有問題:
<style name="LoginDialogTheme" parent="Theme.AppCompat.DayNight.Dialog">
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowBackground">@null</item>
</style>
修改成如下這樣才行:
<style name="LoginDialogTheme" parent="Theme.AppCompat.DayNight.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/progressColor</item>
</style>
colors.xml
<color name="progressColor">#0000</color>
效果如下:
完美解決
最後附上所有源碼的鏈接:源碼