2012-03-25 21 views
1

ここに状況があります。私のアクティビティは実行されており、アニメーションを開始する関数を呼び出します。このアニメーションが終了したら、さらに2秒待ってから、通常の処理を続行する必要があります。私は何をお勧めしますか?アニメーション終了後の処理を続行するにはどうすればよいですか?

OnAnimationEndは、繰り返しの最後に到達するまでに私のケースを助けません。私のプロセスは、呼び出し元の関数からすでに返ってきて処理を続けています。 私はどう思いますか? thread.sleep(アニメーションの長さ+ 2秒)ですか? おかげ

EDIT:あなたは私の活動は、各プレーヤーのためのstartAnimatingを呼び出し続ける見ることができるように、私は

Public class myclassActivity extends Activity{ 
.. 
. 
. 
. 
public void runGame(){ 

    player1.startAnimating(); 
    player2.start Animating(); 
    player3.startAnimating(); 
    updateStatus(); 
    runGame(); 
} 

} 

だから私は、私は次のコードを持っている私は、コード でやっているものを説明しなければならないかもしれないと思った OK。そこでは、ある仕事と1秒間のアニメーションが行われます。

私は、player2.startAnimationが完了するまで、player2.startAnimationが開始しないようにします。残りのコードについても同様です。 現在のところ、コードが完全に実行され、アニメーションが実行されている間に再び再実行されます。これについて助けてください?

+0

どのオブジェクトタイプがplayer1、player2、およびplayer3ですか? – Phil

+0

彼らは何も拡張しない通常のJavaクラスです。 – Snake

答えて

0

postDelayedを使用すると、正確な遅延後に何かを実行できます。例えば、(2秒遅れ):

LinearLayout.postDelayed(new Runnable() { 
    public void run() { 
     //Do something 
    } 
}, 2000); 
+0

私は走る必要があるものではありません。私は(アニメーションから戻る)私のプロセスを再開しているので、すべてが遅れる必要がある – Snake

0

方法player1/2のアニメーションを仕上げに

myclassActivity#animationFinished(this) 

ようなメソッドを呼び出し、次に

player1.startAnimating(this) 

によって発信者インスタンスを通過し、約?その後、

+0

答えをありがとう。これはうまくいくでしょうが、問題は、許可されたサークルの外にメソッドを呼び出すアニメーションクラスを持っているので、コードデザインが本当に悪いことです。 – Snake

2

void animationFinished(Player p) { 
    if (p==player1) { 
     player2.start(); 
    } else if (p==player2) { 
     player3.start(); 
    } 
} 

か何かが、それは完全なあなたを助けるでこのコードを観察します。

public class PlayersActivity extends Activity { 
ImageView I1,I2; 
Button B; 
Animation T1,T2; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    I1=(ImageView)findViewById(R.id.i1); 
    I2=(ImageView)findViewById(R.id.i2); 

    B=(Button)findViewById(R.id.b1); 

    B.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      T1=new TranslateAnimation(0,100,0,0); 
      T1.setDuration(1000); 
      I1.startAnimation(T1); 
      T1.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        T2=new TranslateAnimation(0,100,0,0); 
        T2.setDuration(1000); 
        T2.setStartOffset(2000); 
        I2.startAnimation(T2); 
        T2.setAnimationListener(new AnimationListener() { 

         @Override 
         public void onAnimationStart(Animation animation) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onAnimationRepeat(Animation animation) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onAnimationEnd(Animation animation) { 
          T1.setStartOffset(2000); 
          I1.startAnimation(T1); 

         } 
        }); 

       } 
      }); 


     } 
    }); 

} 

}

もしplayer3 onAnimationEnd(){UpdateStatusを()を置いている、あなたが後player3を完了し、この二つの方法を開始すると仮定する。 runGame();}

+0

答えをありがとう。これはうまくいくでしょうが、問題は、許可されたサークルの外にメソッドを呼び出すアニメーションクラスを持っているので、コードデザインが本当に悪いことです。 – Snake

+0

ちょうど私は、コードをonAnimationEnd()であなたのコードを実装するonAnimationListenerを定義するメソッドを呼び出すサンプルコードを与えている。あなたはその中であなたのメソッドを呼び出すでしょう。 – VSC

関連する問題