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

时间:2012-10-31 21:18:02

标签: android animation graphics

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

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

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

2 个答案:

答案 0 :(得分:4)

我发现了一个解决方案。

我发现在致电animator.removeAllListeners();之前,您必须致电animator.cancel();。 (对于大多数4.0+设备都是如此,但在GSIII上,出于某种原因,你不需要。)

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

答案 1 :(得分:1)

我认为即使你取消了动画师,听众仍然在听这个事件。

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

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

我希望这会有所帮助

RF