Android onAnimationEnd()调用了两次
在从23更新构建sdk 27之后,在调用下面的代码时遇到了onAnimationEnd两次触发的问题。onAnimationStart只调用一次,onAnimationRepeat未按预期调用。现在,在应用程序中,当用户按下后退按钮一次时,他们会后退两步 gradle中的所有库都使用最新的27.0.2。这段代码在sdk 23中可以正常工作。我们的最低目标是16 我正在通过使用isAnimating标志来解决问题,但希望找到可能影响应用程序其他区域的根本原因Android onAnimationEnd()调用了两次,android,android-support-library,android-8.1-oreo,Android,Android Support Library,Android 8.1 Oreo,在从23更新构建sdk 27之后,在调用下面的代码时遇到了onAnimationEnd两次触发的问题。onAnimationStart只调用一次,onAnimationRepeat未按预期调用。现在,在应用程序中,当用户按下后退按钮一次时,他们会后退两步 gradle中的所有库都使用最新的27.0.2。这段代码在sdk 23中可以正常工作。我们的最低目标是16 我正在通过使用isAnimating标志来解决问题,但希望找到可能影响应用程序其他区域的根本原因 @Override public vo
@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);
请试一试
开始动画之前
片段TopopView.clearAnimation 删除onAnimationEnd上的旧侦听器将解决您的问题
@Override
public void onAnimationEnd(Animation animation) {
slideOutRightAnimation.setAnimationListener(null);
// ... //
}
你能确保onBackPressed没有被调用两次吗?不是的,我试着在onBackPressed和onAnimationStart中设置断点。他们两个都只打过一次电话。还应该提到的是,这段代码在SDK 23中运行良好。在NimationEnd方法中添加Thread.dumpStack Inode时,您在这两种情况下都看到了什么?@pskink试图记录animation.toString的.d值?或者只是onAnimationEnd中的animation.hashCode?它们真的一样吗?你到底想要什么?当我调用startAnimation时,我希望AnimationEnd被调用一次。现在StartAnimation每次调用两次,你想在屏幕上从右向左滑动吗?