2011-10-28 15 views
0

私が使用しているSwipeSampleには、レイアウトを左から右にスライドさせるアニメーションxmlがあります。各アニメーションには800に設定されています。アニメーションを完成させるためにWhileループに遅延を追加する

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

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

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は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 
    } 
}); 
関連する問題