0

アプリが読み込まれると、画面をアニメーション化します。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) がすぐに実行されます。スケジュールは実際に実行されると思いますが、何らかの理由でアニメーションがトリガーされることはありません。

4

1 に答える 1

1

を呼び出すだけpostDelayed()ですView

于 2010-11-14T23:33:29.377 に答える