2010-11-11 5 views
2

Dans mon application, j'ai une activité qui s'ouvre en plus de l'activité en cours lorsque j'appuie sur le bouton de menu. Dans cette superposition, je souhaite que mes vues s'affichent lorsque l'activité apparaît et disparaissent à nouveau avant qu'elle ne se ferme. Voici mon code:Animer la vue avant la fermeture Activité

public class OverlayActivity extends Activity { 
TextView t; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.overlay); 
    t = (TextView) findViewById(R.id.view_overlay_text); 
    t.setAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in)); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    boolean r = false; 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_BACK: 
     finishOverlay(); 
     r = true; 
     break; 
    default: 
     r = super.onKeyDown(keyCode, event); 
     break; 
    } 
    return r; 
} 

private void finishOverlay() { 
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
    a.setAnimationListener(fadeOutComplete); 
    t.setText("TEST"); // <--- if i add this line the code suddenly works 
    t.setAnimation(a); 
} 

Animation.AnimationListener fadeOutComplete=new Animation.AnimationListener() { 
    public void onAnimationEnd(Animation animation) { 
     finish(); 
    } 

    public void onAnimationRepeat(Animation animation) { 
     // not needed 
    } 

    public void onAnimationStart(Animation animation) { 
     // not needed 
    } 
}; 

}

D'une certaine façon le fadeOut-Animation ne fonctionne que si je fais quelque chose comme t.setText ("someText"). Si je laisse cette ligne, elle ne s'anime pas et le AnimationListener n'est donc pas déclenché.

MISE À JOUR: Quelques informations font clearify le problème: onCreate: TextView se fane et je peux le voir sur l'écran onKeyDown « BACK »: finishOverlay est appelé. (elle le fait réellement) finishOverlay: L'animation n'est pas appliquée à la vue que je veux fondre. Pourquoi? C'est la même référence. Serait-ce un problème de portée?

Répondre

0

Vous devez afficher le code XML de votre textview.

Je soupçonne que le texte dans le textview est vide ... donc aucune animation ne se produit.

En outre, pourquoi définissez-vous la visibilité de la vue de texte dans votre code. Puisque la textview apparaît dans votre méthode onCreate, vous n'avez pas besoin de cette ligne car vous ne devriez pas la définir comme invisible dans votre fichier XML.

+0

c'est vrai. Je n'ai pas besoin de définir la visibilité. C'est là par erreur mais je ne change pas le problème. le textview n'est pas vide. J'ai essayé la même chose avec une imageview. ne marche pas non plus. donc ce n'est pas spécial à un textview. – notme

+0

Je suppose que je commencerais à regarder pourquoi vous essayez d'attraper le bouton de retour sur votre chemin. En général, j'ai vu des gens utiliser onDestroy() pour les activités. – user432209

0

J'ai mis à jour votre code et maintenant ce code fonctionne comme vous le souhaitez.

public class mp3list extends Activity { 
TextView t; 
Animation a; 
Animation.AnimationListener fadeOutComplete; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mp3list); 
    t = (TextView) findViewById(R.id.tvc); 
    run(); 
    startOverlay(); 
    } 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
boolean r = false; 

switch (keyCode) { 
case KeyEvent.KEYCODE_BACK: 
    run(); 
    finishOverlay(); 
    r = true;   
    break; 
default: 
    r = super.onKeyDown(keyCode, event); 
    break; 

} 
return r; 
} 

private void startOverlay() { 

a = AnimationUtils.loadAnimation(this, R.anim.fade_in); 
a.setAnimationListener(fadeOutComplete); 
t.setText("helo world"); // <--- if i add this line the code suddenly works 
t.setAnimation(a); 
} 

private void finishOverlay() { 
a = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
a.setAnimationListener(fadeOutComplete); 
t.setText("helo world"); // <--- if i add this line the code suddenly works 
t.setAnimation(a); 
finish(); 
} 

public void run(){ 

    fadeOutComplete = new Animation.AnimationListener() { 
     public void onAnimationEnd(Animation animation) { 

     } 

     public void onAnimationRepeat(Animation animation) { 
      // not needed 
     } 

     public void onAnimationStart(Animation animation) { 
      // not needed 
     } 
     }; 
    } 

}  
Questions connexes