2017-11-14 2 views
0

私は、非同期メッセージを処理するハンドラを含むアクティビティを持っています。私がメッセージを受け取ったら、私はアニメーションをトリガーしたい。その後、別のメッセージが表示されたら、別のアニメーションをトリガーしたいが、最後のアニメーションが終了した後でなければならない。非同期イベントを使用して一連のアニメーションをトリガーするにはどうすればよいですか?

これを行う最もクリーンな方法は何ですか?

答えて

0

アニメーションリスナーを使用して、アニメーションがいつ終了したかを判断できます。このようなもの:

Animation a = AnimationUtils.loadAnimation(this.getContext(), R.anim.animation); 

    a.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      if(receivedMessage == true){ 
       startNextAnimation(); 
      } 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 
+0

どのように次のアニメーションを開始する必要がありますか?たとえば、新しいメッセージを受け取ったときに、アニメーションをブロッキングキューに入れてそこから選択することができますが、メソッドが呼び出されたときに次のメッセージがまだ到着していない場合はどうなりますか?私はそれが動作しないと思う – InfiniteSnow

+0

あなたはリスナーを作成することができます。 onMessageReceived()と何が起こるべきかのロジックを処理します。 onMessageReceivedで "receivedMessage = true"を設定します。現在のアニメーションを継続することができます。アニメーションがすでに終了している場合は、メッセージが受信されたときに次のアニメーションを開始することがわかります。 (あなたはアニメーションを追跡し、アニメーションが起こっていなければnullに設定することができます) ie:if(currentAnimation == null)startNewAnimation() –

関連する問題