2013-10-03 13 views
1

Мне было интересно, может ли кто-нибудь помочь мне, я везде искал полезную помощь, но ничего не нашел. У меня есть четыре элемента View (Button), и мне нужно анимировать их в случайном порядке один за другим. Я пробовал ждать Animation.hasEnded(), что просто замораживает все приложение. Также я пробовал ждать AnimationListener, чтобы изменить логическое значение с onAnimationEnd(), но это также заморозило приложение. Оба Thread.sleep() и SystemClock.sleep() для ожидания дали тот же результат. Пожалуйста, может кто-нибудь мне помочь?Дождитесь окончания анимации Android

+0

вы можете дать нам больше кода о том, как вы ждете анимацию? И я не думаю, что вам нужно вызвать thread.sleep() или systemclock.sleep в onAnimationEnd() –

ответ

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

рад, что я мог бы помочь :) –

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