2014-09-28 204 views
0

我已经把下面的代码在for循环中: - 。如何在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(); 

的for循环,我想等前一次迭代的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

编辑:你是什么完整的示例寻找:

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 – 2014-09-28 07:40:40

+0

我编辑了我的答案,请检查。 – ziv 2014-09-28 11:30:23