#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
}
});