Добавить задержку в цикл While для завершения анимации

#android

#Android

Вопрос:

Используемый мной SwipeSample имеет анимационный XML, который перемещает макеты слева направо и т. Д. Для каждой анимации установлена длительность 800.

У меня есть цикл while, который проверяет, на какую позицию нажимает пользователь, а затем зацикливает анимацию, чтобы завершить цикл.

Я обнаружил, что если я нахожусь в текущей позиции 1 и хочу перейти к 0, анимация работает нормально. Если я нахожусь на позиции 6 и хочу перейти к 0, кажется, что макеты скользят за один удар, цикл не позволяет времени анимации воспроизводиться перед каждым проходом.

Можно ли добавить задержку в цикл while или мне следует использовать другой подход?

Это код:

случай R.id.EditTYellow: System.out.println («Текст нажат желтым цветом»);

         if(viewFlipper.getDisplayedChild()!=0 || viewFlipper.getDisplayedChild()> 0 ){
            do  
             { 
            viewFlipper.setInAnimation(slideRightIn);
            viewFlipper.setOutAnimation(slideRightOut);
            viewFlipper.showPrevious();
            //Delay need here to allow animation to complete
             } while (viewFlipper.getDisplayedChild()!=0);
        }                       
        //System.out.println("New Flipper " viewFlipper.getDisplayedChild());
    break;
 

Я пытался добавить Thread.sleep(800), но, похоже, это не сработало.

             try {
                Thread.sleep(800);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
 

Ответ №1:

Thread.sleep — это ЗЛО. Использовать его для устранения проблем с синхронизацией — это большой минус. Анимации в Android могут сообщить вам, когда они будут выполнены … через обратный вызов AnimationListener . Вы устанавливаете прослушиватель в свою анимацию (slideRightIn, slideRightOut), и сама анимация сообщит вам, когда это будет сделано, после чего вы можете делать все, что захотите.

 slideRightIn.setAnimationListener(new AnimationListener() {
    public void onAnimationStart(Animation animation) {

        }

    public void onAnimationRepeat(Animation animation) {

    }

    public void onAnimationEnd(Animation animation) {
      // will be called when your animation is complete 
    }
});