2012-10-31 23 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

相關問題