2015-07-14 5 views
2

Я потратил немало времени, пытаясь выяснить, как ждать завершения анимации, прежде чем продолжить код. До сих пор я пытался использовать (animation.hasEnded() == False), используя Thread.sleep, используя таймер, но, похоже, не может заставить ничего работать.Android - дождитесь окончания анимации, прежде чем продолжить?

Что-то, появившееся несколько раз, заключалось в том, чтобы добавить анимацию в анимацию, которую я пробовал, но не уверен, как продвинуться дальше.

создать анимацию, запустить анимацию, а затем иметь строку кода после, который я только хочу быть выполнена после того, как анимация закончена:

Animation moveDown = allAnimStuff(duration); //creates animation 

    image.startAnimation(moveDown); // Start the animation 
    displayScore(score); // wait for animation to finish before executing this line 

и здесь метод allAnimStuff (длительность) используется для создания анимации:

private Animation allAnimStuff(final long duration) { 

     Animation moveDown = new TranslateAnimation(image.getX(), image.getX(), (-image.getHeight()), pxHeight - image.getHeight()/2); //creates animation 
     moveDown.setDuration(duration); 
     moveDown.setFillAfter(false); 

     moveDown.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       //some code to make it wait here? 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       image.setY((pxHeight/2 - image.getHeight())); 

      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
      } 
     }); 


     return moveDown; 
    } 

ответ

4

запись следующей строки в методе onAnimationEnd

displayScore(score); 

например

private Animation allAnimStuff(final long duration) { 

     Animation moveDown = new TranslateAnimation(image.getX(), image.getX(), (-image.getHeight()), pxHeight - image.getHeight()/2); //creates animation 
     moveDown.setDuration(duration); 
     moveDown.setFillAfter(false); 

     moveDown.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       //some code to make it wait here? 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       image.setY((pxHeight/2 - image.getHeight())); 
      displayScore(score); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
      } 
     }); 


     return moveDown; 
    } 
+0

Если проблема решена, то примите ответ. –

+0

Это работает пока, но если мне нужно больше строк кода для запуска после завершения анимации, у меня должен быть весь мой код в методе onAnimationEnd? –

+0

Я нашел способ обойти мою проблему в комментарии, спасибо большое за простое решение! –

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