2010-11-14 22 views
0

Lorsque mon application se charge, je l'anime un écran. Dans le onAnimationEnd j'appelle l'horaire pour qu'il appelle une fonction 2 secondes plus tard qui appellera une animation pour animer la vue à nouveau . Actuellement, il s'anime, mais le planificateur ne semble jamais appeler l'animation. Si je clique sur la maison, puis revenir à l'application, il appelle immédiatement l'animation. Pourquoi, si le planning fonctionne, l'application attend jusqu'à ce qu'elle perde la mise au point puis se recentre pour déclencher la fonction que le planning est censé appeler. Voici le code:android: Problème d'emploi du temps pour appeler une animation

Ceux-ci sont définis dans le 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); 

Ceux-ci sont définis en dehors de la onCreate dans la classe d'activité:

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); 
} 

Donc, fondamentalement, il exécute les DebuterAnimation (slideTopIn). Alors rien ne se passe. Si je clique sur la maison, puis retourne à l'application, le startAnimation (slideTopOut) s'exécute immédiatement. Je devine que le programme fonctionne réellement mais ne déclenche jamais l'animation pour une raison quelconque.

+0

Je me débarrasser de la minuterie pour voir son effet et affiner le problème. – user432209

+0

Je viens de faire ça. Si je supprime l'heure et appelle juste le droit hideFreeAlert() dans le onAnimationEnd pour le slideTopInListener, il glisse dans les diapositives, comme prévu. Donc, le problème est définitivement dans le planificateur d'une certaine façon. – LoneWolfPR

+0

a changé mon approche et a suivi cet exemple: http: //stackoverflow.com/questions/2857101/schedule-task-in-android – LoneWolfPR

Répondre

1

Il suffit d'appeler postDelayed() sur tout View.