为什么在动画侦听器中调用 .cancel() 会导致 StackOverflowError?

gsy*_*sko 1 graphics animation android

是否有某种原因我无法在动画侦听器中提供的 Animator 上调用 .cancel() ?

当我执行以下代码时,出现 StackOverflowError:

        animation.addListener(new ValueAnimator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {
                if (!showCircles)
                    animator.cancel();
            }
        ....
Run Code Online (Sandbox Code Playgroud)

gsy*_*sko 5

我发现了一个解决方案。

我发现你必须先打电话animator.removeAllListeners();,然后再打电话animator.cancel();。(对于大多数 4.0+ 设备都是如此,但在 GSIII 上,出于某种原因,您不需要这样做。)

出于某种原因,该cancel()命令导致onAnimationStart再次触发(以无限循环结束)。