popwindow 动画取消奔溃报错java.lang.NullPointerException ViewRootImpl.drawAccessibilityFocusedDrawable

现在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的手机上就不在出现奔溃了




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值