アニメーションを完了するためにWhileループに遅延を追加する

私が使用しているSwipeSampleには、左から右へレイアウトをスライドさせるアニメーションxmlがあります。各アニメーションには、durationが800に設定されています。

私は、ユーザーがクリックした位置を確認してループを完成させるためにアニメーションをループするwhileループを持っています。

私が見つけているのは、現在の位置が1で、0にしたい場合、アニメーションは正常に動作するということです。私がポジション6にいて、0に移動したい場合は、レイアウトが1ヒットでスライドするように見えますが、ループでは各パスの前にアニメーションの時間を再生できません。

whileループに遅延を追加することは可能ですか?別のアプローチを使用する必要がありますか?

これはコードです:

ケースR.id.編集長官:             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です。同期の問題を解決するためにそれを使用することは、大したものではありません。アンドロイドのアニメーションは、アニメーションリスナーのコールバックによって、完了したことを知らせることができます。リスナーをアニメーション(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 
    }
});
1
追加された