1

有什么原因我不能在动画监听器中提供的 Animator 上调用 .cancel() 吗?

当我执行以下代码时,我得到一个 StackOverflowError:

        animation.addListener(new ValueAnimator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {
                if (!showCircles)
                    animator.cancel();
            }
        ....
4

2 回答 2

5

我发现了一个解决方案。

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

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

于 2012-11-22T04:23:41.670 回答
1

我认为即使您取消了动画制作者,听众仍在监听该事件。

我不完全确定这是否可行,但您可以尝试添加:

if(animator != null) { animator.cancel(); }

我希望这有帮助

射频

于 2012-10-31T22:05:41.927 回答