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

'animation'은 내부 클래스 내에서 호출 될 수 없습니다 (final로 선언되지 않는 한). – gsysko

답변

4

도움이되기를 바랍니다.

animator.cancel();으로 전화하기 전에 animator.removeAllListeners();으로 전화해야합니다. (이것은 4.0 + 이상의 모든 장치에서 가능하지만 GSIII에서는 어떤 이유로 든 필요 없습니다.)

어떤 이유인지 cancel() 명령은 onAnimationStart이 다시 트리거되도록합니다. 무한 루프).

+0

이것이 Android 애니메이션 프레임 워크 버그인지 궁금합니다. 내가 말하는 이유는 갤럭시 SIII가이 동작을 나타내지는 않지만 HTC DNA와 Moto RAZR HD가 그렇다는 것입니다. 그래서 삼성의 누군가가이를 수정했을 것 같습니다. 나는 이것을 추적 할 자격이 있다고 느끼지 않지만 누군가이 주제에 관해 더 많이 알고 있다면 듣고 싶어 할 것이다. – gsysko

+0

다행 이군요. +1 –

1

난 당신이 리스너는 여전히 이벤트를 수신하는 애니메이션을 취소하는 경우에도 생각합니다.

나는이 작동하지만 당신은 추가 시도 할 수 있다면 완전히 확실하지 않다 :

경우 { animator.cancel(); (애니메이터 = null이!) }

나는 이것이 내가 해결책을 발견

RF

+1

당신이 맞습니다. 많은 감사합니다! – gsysko

+0

미안하지만 너무 빨리 말했습니다. 나는 여전히 StackOverflow를보고있다. – gsysko

+0

솔루션을 발견했습니다. (귀하의 답변에 따라 달라질 수 있습니다. 또한 길을 따라 기괴한 주름을 발견했습니다.) 솔루션이 게시되었습니다. – gsysko

관련 문제