添加延迟到While循环以完成动画

时间:2011-10-28 03:51:15

标签: android

我正在使用的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();
            }

1 个答案:

答案 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 
    }
});