由动画取消()引起的java崩溃
我有两个动画,幻灯片[1]和幻灯片[3],当我试图在动画自身重复时取消它们时,会导致崩溃。以下是一些相关代码:
slide[1].setDuration(500); slide[1].setStartDelay(500);
slide[3].setDuration(500); slide[3].setStartDelay(500);
slide[1].addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
if (!start) {
table[2][2].setBackgroundResource(R.drawable.black);
slide[1].setDuration(1000);
slide[1].setStartDelay(0);
slide[3].setDuration(1000);
slide[3].setStartDelay(0);
slide[1].removeAllListeners();
slide[3].cancel();
slide[1].cancel();
}
}
@Override
public void onAnimationEnd(Animator animation) {
}
}); slide[1].start(); slide[3].start();
导致崩溃的行是“幻灯片[1]。取消();”,我不知道为什么。 显然,当手机运行在JellyBean上时,会导致崩溃,但不包括棉花糖。 我怎样才能解决这个问题
谢谢
更新:以下是日志:
03-13 16:18:01.943 1623-1623/com.example.ohad.squerz E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at 安卓.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:603)
at 安卓.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:639)
at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at 安卓.view.Choreographer.doCallbacks(Choreographer.java:555)
at 安卓.view.Choreographer.doFrame(Choreographer.java:524)
at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at 安卓.os.Handler.handleCallback(Handler.java:615)
at 安卓.os.Handler.dispatchMessage(Handler.java:92)
at 安卓.os.Looper.loop(Looper.java:137)
at 安卓.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
# 1 楼答案
此崩溃已在this commit中的AOSP中修复
如果希望支持API 16,则需要在
onAnimationUpdate
/onAnimationRepeat
之外的其他位置取消动画在您的情况下(如果这很重要,因为这个答案在您的问题之后很长一段时间才出现),您可能希望使用
setRepeatCount(0)
避免在您的第一个动画师身上重复