2014-02-18 3 views
9

나는 AnimatorSetAnimatorSet의 애니메이션이 끝났습니까?

Button fades in > Click button > Remaining buttons fade out

그래서이 작업을 수행하기 위해, 나는 onClickListner after the animation is completed을 설정할 사용하여 애니메이션 페이드 버튼을 애니메이션하기 위해 노력하고있어,하지만 작동하지 않는 것 . 애니메이션 triggers the onClick action의 중앙 버튼을 클릭하면 :

setQuestion = new AnimatorSet();   
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5); 
setQuestion.start(); 

if the animation has finished를 확인하는 방법이다.

private void checkAnimation() { 
    while (true) { 
     // Check if animation has ended 
     if (setQuestion.isRunning() == false) { 
      assignListners(); 
      break; 
     } 
    } 
} 
+0

는 당신이를 추가 할 수있는 방법입니다 AnimatorListner : http://stackoverflow.com/questions/7274001/how-do-i-do-something-when-an-animation-finishes – Zen

답변

26

fadeinAnimation5에 AnimatorListener을 설정할 수 있습니다. 그러면 onAnimationEnd 콜백이 생깁니다.

fadeinAnimation5.addListener(new AnimatorListener() { 

      @Override 
      public void onAnimationStart(Animator animation) { 
       // ... 
      } 

      @Override 
      public void onAnimationRepeat(Animator animation) { 
       // ... 
      } 

      @Override 
      public void onAnimationEnd(Animator animation) { 
       // ... 
      } 

      @Override 
      public void onAnimationCancel(Animator animation) { 
       // ... 
      } 
     }); 

또는 slott에 의해 제안 같은 AnimatorListenerAdapter

fadeinAnimation5.addListener(new AnimatorListenerAdapter() { 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     // ... 
    } 
} 
+3

조금 더 간단한 AnimatorListenerAdapter를 위해 갈 수있는 모든 이벤트가 필요하지 않습니다. – slott

+0

@slott 당신은 방금 내 마음을 날려 버렸다. – peresisUser

+0

나는주의를 잃었다. onAnimationEnd 콜백은 애니메이션이 끝나거나 OR이 취소 된 경우에 모두 호출됩니다. 애니메이션이 끝난 시점에서만 알림을 받으려면 withEndAction (Runnable)을 대신 사용하십시오. –

1

내가 여기 비슷한 문제가되었다 사용 나는 그것을 해결하는 방법입니다

여기
private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){ 
    AnimatorSet mAnimationSet = new AnimatorSet(); 
    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA, 1f, 0f); 
    fadeOut.addListener(new Animator.AnimatorListener() { 
     @Override 
     public void onAnimationStart(Animator animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      fadeOutTarget.setVisibility(View.GONE); 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 
     } 

     @Override 
     public void onAnimationRepeat(Animator animation) { 
     } 
    }); 
    fadeOut.setInterpolator(new LinearInterpolator()); 

    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f); 
    fadeIn.addListener(new Animator.AnimatorListener() { 
     @Override 
     public void onAnimationStart(Animator animation) { 
      fadeInTarget.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) {} 

     @Override 
     public void onAnimationCancel(Animator animation) {} 

     @Override 
     public void onAnimationRepeat(Animator animation) {} 
    }); 
    fadeIn.setInterpolator(new LinearInterpolator()); 
    mAnimationSet.setDuration(duration); 
    mAnimationSet.playTogether(fadeOut, fadeIn); 
    mAnimationSet.start(); 
}