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) {
}
});
どのように次のアニメーションを開始する必要がありますか?たとえば、新しいメッセージを受け取ったときに、アニメーションをブロッキングキューに入れてそこから選択することができますが、メソッドが呼び出されたときに次のメッセージがまだ到着していない場合はどうなりますか?私はそれが動作しないと思う – InfiniteSnow
あなたはリスナーを作成することができます。 onMessageReceived()と何が起こるべきかのロジックを処理します。 onMessageReceivedで "receivedMessage = true"を設定します。現在のアニメーションを継続することができます。アニメーションがすでに終了している場合は、メッセージが受信されたときに次のアニメーションを開始することがわかります。 (あなたはアニメーションを追跡し、アニメーションが起こっていなければnullに設定することができます) ie:if(currentAnimation == null)startNewAnimation() –