2014-09-28 2 views
0

я поместил следующий код в цикле: -.Как выполнить действие сразу после анимации AnimatorSet?

set8.playTogether(
          ObjectAnimator.ofFloat(ball4, "translationX", x1, xn), 
          ObjectAnimator.ofFloat(ball4, "translationY", y1, yn), 
          ObjectAnimator.ofFloat(ball8, "translationX", xn, x1), 
          ObjectAnimator.ofFloat(ball8, "translationY", yn, y1) 

         ); 
         set8.setDuration(t).start(); 

Перед каждой итерации для цикла, я хочу ждать animaition предыдущей итерации, чтобы закончить. Есть ли способ сделать это?

В моем проекте у меня есть прослушиватель onclick на изображении. Я также хочу, чтобы onclicklistener был нефункциональным до тех пор, пока анимация не завершится в приведенном выше коде.

Есть ли способ сделать это? ??

ответ

0

От: http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html

Вы можете добавить Animator.AnimatorListener к анимации:

set8.addListener(new AnimatorListenerAdapter() { 
    public void onAnimationEnd(Animator animation) { 
     // animation is done, handle it here 
    } 

вы можете найти другой пример здесь: How to position a view so the click works after an animation

EDIT: Полный пример того, что вы

int totalSteps = 8; 
    for (int i=0; i<totalSteps; i++) { 
     // .. create the animation set 
     set8.addListener(new MyAnimatorListenerAdapter(i, new onAnimationStpeDoneListener(){ 
      @Override 
      public void onAnimationStepDone(int step) { 
       if (step < totalSteps) { 
        // start the next animation 
       } else { 
        // all steps are done, enable the clicks... 
       } 
      } 
     })); 
    } 
    public interface onAnimationStpeDoneListener { 
     public void onAnimationStepDone(int step); 
    } 

    public class MyAnimatorListenerAdapter extends AnimatorListenerAdapter { 
     private int mStep; 
     private onAnimationStpeDoneListener mDelegate; 

     public MyAnimatorListenerAdapter(int step, onAnimationStpeDoneListener listener) { 
      mStep = step; 
      mDelegate = listener; 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      if (mDelegate != null) { 
       mDelegate.onAnimationStepDone(mStep); 
      } 
     } 
    } 
+0

но, как перейти к следующей итерации с помощью этого метода? Можете ли вы упростить это ... @ziv –

+0

Я отредактировал свой ответ, пожалуйста, проверьте. – ziv

Смежные вопросы