onAnimationEnd()调用两次

时间:2018-01-20 10:11:47

标签: android android-support-library android-8.1-oreo

在更新了构建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);

2 个答案:

答案 0 :(得分:1)

请尝试

开始动画之前

fragmentToPopView.clearAnimation();

答案 1 :(得分:0)

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

        @Override
        public void onAnimationEnd(Animation animation) {
            slideOutRightAnimation.setAnimationListener(null);
            // ... //
        }