2

从 23 更新 build sdk 27​​ 后,在调用时遇到了 onAnimationEnd 在下面的代码中触发两次的问题。onAnimationStart 仅被调用一次,并且 onAnimationRepeat 没有按预期调用。现在在应用程序中,当用户按一次后退按钮时,他们会后退两步。

gradle 中的所有库都使用最新的 27.0.2。这段代码在 sdk 23 中运行良好。我们的最小目标是 16。

我正在使用 isAnimating 标志来解决问题,但想找到可能影响应用程序其他区域的根本原因。

@Override
public void onBackPressed() {
        Animation slideOutRightAnimation = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
        slideOutRightAnimation.setFillAfter(true);
        slideOutRightAnimation.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                isAnimating = true;
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if(isAnimating) { // Fix
                    getSupportFragmentManager().popBackStackImmediate();
                }
                isAnimating = false;
            }
        });
        fragmentToPopView.clearAnimation();
        fragmentToPopView.startAnimation(slideOutRightAnimation);
4

2 回答 2

4

删除旧的侦听器onAnimationEnd将解决您的问题。

        @Override
        public void onAnimationEnd(Animation animation) {
            slideOutRightAnimation.setAnimationListener(null);
            // ... //
        }
于 2019-02-26T15:07:51.787 回答
2

请尝试一下

开始动画之前

fragmentToPopView.clearAnimation();

于 2018-01-20T11:20:39.090 回答