2012-10-31 29 views
1

是否有某些原因让我无法在动画侦听器中提供的Animator上调用.cancel()?为什么在动画侦听器中调用.cancel()会导致StackOverflowError?

当我执行下面的代码我得到的StackOverflowError:

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

如果你调用'animation.cancel()'会发生什么? – tolgap

+0

'动画'不能从内部类中调用(除非它被声明为final)。 – gsysko

回答

4

我发现了一个解决方案。

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

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

+0

我不知道这是一个Android动画框架错误?我之所以这样说,是因为我发现Galaxy SIII没有表现出这种行为,但是HTC DNA和Moto RAZR HD都这么做 - 所以三星似乎有人可能会纠正这种情况?我不觉得有资格跟踪这个问题,但有兴趣知道是否有人对这个问题有更多的了解。 – gsysko

+0

很高兴你找到它。 +1 –

1

我想,即使你取消动画听者仍然监听事件。

我不能完全肯定这是否会工作,但你可以尝试添加:

如果{ animator.cancel();(动画!= NULL) }

我希望这有助于

RF

+1

先生,您是正确的。非常感谢! – gsysko

+0

我很抱歉,但我说得太快了。我仍然看到StackOverflow。 – gsysko

+0

我发现了一个解决方案(你的答案引导我 - 我也发现了一个奇怪的皱纹。)解决方案发布。 – gsysko

相关问题