アプリが読み込まれると、画面をアニメーション化します。onAnimationEnd で、スケジュールを呼び出して、2 秒後にアニメーションを呼び出してビューを再びアニメーション化する関数を呼び出すようにします。現在、アニメーション化されていますが、スケジューラーがアニメーション化を呼び出すことはないようです。ホームをクリックすると、アプリに戻り、すぐにアニメーションが呼び出されます。スケジュールが機能している場合、アプリはフォーカスを失うまで待機し、フォーカスを戻して、スケジュールが呼び出すはずの関数を実際にトリガーするのはなぜですか。コードは次のとおりです。
これらは onCreate で定義されています。
slideTopIn = AnimationUtils.loadAnimation(this, R.anim.slide_top_in);
slideTopIn.setAnimationListener(slideTopInListener);
slideTopOut = AnimationUtils.loadAnimation(this, R.anim.slide_top_out);
slideTopOut.setAnimationListener(slideTopOutListener);
freeAlertMsg.startAnimation(slideTopIn);
これらは、アクティビティ クラス内の onCreate の外で定義されます。
private AnimationListener slideTopInListener = new AnimationListener(){
public void onAnimationEnd(Animation anim){
alertTimer.schedule(new Runnable() {
public void run() { hideFreeAlert(); }
}, 2, TimeUnit.SECONDS);
};
public void onAnimationStart(Animation anim){
freeAlertMsg.setVisibility(View.VISIBLE);
};
public void onAnimationRepeat(Animation anim){
};
};
private AnimationListener slideTopOutListener = new AnimationListener(){
public void onAnimationEnd(Animation anim){
mainScreen.removeView(freeAlert);
};
public void onAnimationStart(Animation anim){
Log.d("Animation Listener","slideTopOutListener");
};
public void onAnimationRepeat(Animation anim){
};
};
private void hideFreeAlert(){
freeAlertMsg.startAnimation(slideTopOut);
}
したがって、基本的には startAnimation(slideTopIn) を実行します。その後、何も起こりません。ホームをクリックしてアプリに戻ると、startAnimation(slideTopOut) がすぐに実行されます。スケジュールは実際に実行されると思いますが、何らかの理由でアニメーションがトリガーされることはありません。