在更新了构建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);
答案 0 :(得分:1)
请尝试
开始动画之前
fragmentToPopView.clearAnimation();
答案 1 :(得分:0)
删除onAnimationEnd
上的旧侦听器将解决您的问题。
@Override
public void onAnimationEnd(Animation animation) {
slideOutRightAnimation.setAnimationListener(null);
// ... //
}