我正在使用的SwipeSample有一个动画xml,可以从左到右滑动布局等。每个动画的持续时间设置为800。
我有一个while循环,用于检查用户点击的位置,然后循环动画以完成循环。
我发现如果我现在处于1的位置并且我想要转到0,那么动画效果很好。如果我在第6位并希望转到0,则布局似乎在一次击中时滑过,循环不允许在每次传球之前播放动画时间。
是否可以在while循环中添加延迟,还是应该使用其他方法?
这是代码:
案例R.id.EditTYellow: System.out.println(“Text Yellow pressed”);
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();
}
答案 0 :(得分:1)
Thread.sleep是EVIL。使用它来修复同步问题是一个很大的问题。 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
}
});