2014-02-18 3 views
9

Я пытаюсь оживить кнопки с замиранием в анимации с использованием AnimatorSetПроверьте, завершена ли анимация AnimatorSet?

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

Вы можете установить AnimatorListener на fadeinAnimation5. Это даст вам обратный вызов 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 вызывается как при завершении анимации ИЛИ. Чтобы получать уведомления только после завершения анимации, используйте вместо этого EnEction (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(); 
} 
Смежные вопросы