現在APP中用到popwindow的地方很多,為了美化體驗效果,很多動畫的展示和取消都加上了動畫效果;下面我就來說下我遇到的問題以及解決的方法;
cancelAnimation.addAnimation(new AlphaAnimation(1.0f, 0.0f));
cancelAnimation.addAnimation(new ScaleAnimation(1, 1, 1, -1));
cancelAnimation.setDuration(executeTime);
cancelAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mScrollView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
mScrollView.setVisibility(View.GONE);
dismiss();
} @Override public void onAnimationRepeat(Animation animation) { }});
上面我是實作了動畫延伸和漸變來取消popwindow,在動畫結束回調dismiss();
在Android 4.4以上是不會出現任何問題;但是在Android 4.1左右的版本就會在取消是奔潰:
java.lang.NullPointerException
#5367 09-20 03:38:07.999 17478 E CrashReport at android.view.ViewRootImpl.drawAccessibilityFocusedDrawableIfNeeded(ViewRootImpl.java:2596)
#5368 09-20 03:38:07.999 17478 E CrashReport at android.view.ViewRootImpl.onHardwarePostDraw(ViewRootImpl.java:2183)
#5369 09-20 03:38:07.999 17478 E CrashReport at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1233)
#5370 09-20 03:38:07.999 17478 E CrashReport at android.view.ViewRootImpl.draw(ViewRootImpl.java:2420)
#5371 09-20 03:38:07.999 17478 E CrashReport at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2274)
檢視網上說的是popwindow調用dismiss()方法時報錯;我了解為時在動畫結束回調時Android4.1版本的是在子線程回調;
是以在調用dismiss();時我們加上handle試下讓它在主線程執行;
cancelAnimation.addAnimation(new AlphaAnimation(1.0f, 0.0f));
cancelAnimation.addAnimation(new ScaleAnimation(1, 1, 1, -1));
cancelAnimation.setDuration(executeTime);
cancelAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mScrollView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
mScrollView.setVisibility(View.GONE);
new Handler().post(new Runnable() {
@Override
public void run() {
dismiss();
}
});
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
果真加了之後再Android 4.1的手機上就不在出現奔潰了