2013-10-03 184 views
1

我想知道是否有人可以帮助我,我一直在寻找有用的帮助,但什么也没找到。我有四个View元素(Button s),我需要按照随机顺序对它们进行一个接一个的动画处理。我试过等待Animation.hasEnded(),这只会冻结整个应用程序。此外,我试图等待AnimationListeneronAnimationEnd()更改布尔值,但也冻结了应用程序。 Thread.sleep()SystemClock.sleep()等待都给出了相同的结果。请,有人可以帮我吗?等待Android动画完成

+0

你可以给我们更多关于如何等待动画的方式的代码吗?我不认为你需要在onAnimationEnd()中调用thread.sleep()或systemclock.sleep。 –

回答

2

以下是我会做:

首先,创建一个成员的随机按钮配置:

private Button[] mRandomButtonsOrder; 

然后,初始化随机按钮顺序:

List<Button> myButtons = new ArrayList<Button>(); 

     myButtons.add(btn1); // Add all your buttons to this array. 
     myButtons.add(btn2); 
     myButtons.add(btn3); 
     myButtons.add(btn4); 

     mRandomButtonsOrder = new Button[myButtons.size()]; // This is a member of the activity! 

     Random random = new Random(); 
     int index; 

     for (int i = 0; i < myButtons.size(); i++) 
     { 
      do 
      { 
       index = random.nextInt() % mRandomButtonsOrder.length; 
      } while (mRandomButtonsOrder[index] != null); 

      mRandomButtonsOrder[index] = myButtons.get(0); 
      myButtons.remove(0); 
     } 

     initiateAnimationOnButton(0); 

现在,这里是initateAnimationOnButton方法:

private void initiateAnimationOnButton(final int buttonIndex) 
    { 
     TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); // Just a sample using TranslateAnimation 
     animation.setDuration(1000); 

     if (buttonIndex < mRandomButtonsOrder.length - 1) 
     { 
      animation.setAnimationListener(new TranslateAnimation.AnimationListener() 
      { 

       @Override 
       public void onAnimationStart(Animation animation) { } 

       @Override 
       public void onAnimationRepeat(Animation animation) { } 

       @Override 
       public void onAnimationEnd(Animation animation) 
       { 
        initiateAnimationOnButton(buttonIndex + 1);       
       } 
      }); 
     } 

     Button btn = mRandomButtonsOrder[buttonIndex]; 
     btn.startAnimation(animation); 
    } 

希望这有助于:)

+0

完全解决了,谢谢! – drRoflol

+0

很高兴我能帮忙:) –