web-dev-qa-db-fra.com

Comment puis-je ajouter une animation à la fin de l'activité ()

J'utilise overridePendingTransition lorsque mon activité est créée et que cela fonctionne bien. Je peux voir que le fondu entrant fonctionne très bien, mais lorsque j'essaie d'animer la fin de l'activité, il effectue toujours la diapositive par défaut de droite à gauche.

J'ai d'abord essayé de définir l'animation de sortie lorsque je commence l'activité comme suit:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (Android.os.Build.VERSION.SDK_INT > Android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

Ensuite, j'ai essayé de le faire quand j'ai fini l'activité aussi

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (Android.os.Build.VERSION.SDK_INT > Android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

Mais aucune de ces approches n'empêchera la diapositive "de droite à gauche" de l'animation de sortie. Des idées sur ce que je fais mal?

82
b-ryce

Je remplace la transition en attente juste après avoir appelé finish ();

Dans mon cas, je l'ai fait pour éviter les transitions.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

L'ordre est important :)

207
Goofyahead

Je suggère d'utiliser la méthode isFinishing () pour configurer les animations sur onPause au lieu d'appeler finish ()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}
21
finish();
overridePendingTransition(0, 0);
18
Felipe

Cette question a déjà répondu, mais le moyen le plus efficace de mettre une animation en quittant une activité consiste à remplacer la méthode "finish ()" de l'activité associée:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
18
Bahadir Tasdemir

J'ai résolu ce problème en utilisant ce type d'approche: 

ouvrir avec animation:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

Pour terminer avec animation:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}
14
Deivison Sporteman

Regardez en le faisant à travers un thème. Vous pouvez définir des animations de sortie pour les activités ou l’application entière

12
schwiz

Après la réponse de @schwiz, voici une substitution d'animation pour le thème de dialogue intégré, où j'ai défini des animations locales slide_up et slide_down. Mon activité spécifie le thème MyDialog afin que ces transitions soient possibles.

<style name="Animation.MyDialog" parent="Android:Animation.Dialog">
    <item name="Android:windowEnterAnimation">@anim/slide_up</item>
    <item name="Android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="Android:Theme.Dialog">
    <item name="Android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>

6
larham1

Utilisez startActivityForResult pour démarrer votre activité enfant et dans onActivityResult () de votre activité parent:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}
5
Chris.Zou
if (getEnterAnimation() > -1 && getExitAnimation() > -1) {
    overridePendingTransition(getEnterAnimation(), getExitAnimation());
} 

où ces méthodes renvoient des animations de R.anim.YOUR_ANIMATION_XML

ajoutez ce code dans votre onCreate () avant 

setContentView()

et dans votre onPause () avant 

super.onPause()

j'ai essayé d'ajouter ce code avant/au sein de ces méthodes, mais l'animation de sortie n'a jamais fonctionné

startActivity()
finish()
onBackPressed()
0