透明进度条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>
效果如下:
完美解决
最后附上所有源码的链接:源码