122 votes

Puis-je modifier l'animation de la transition Android startActivity() ?

Je commence une activité et je préférerais avoir un fondu enchaîné en alpha pour startActivity() et un fondu enchaîné pour le finish() . Comment puis-je procéder dans le SDK Android ?

1 votes

0 votes

Pour la transition des diapositives startActivity(intent); overridePendingTransition(android.R.anim.slide_out_right, android.R.anim.slide_in_left);

302voto

Allen Chan Points 1231

À partir du niveau 5 de l'API, vous pouvez appeler overridePendingTransition immédiatement pour spécifier une animation de transition explicite :

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

ou

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

17 votes

Ajoutez quelque chose comme : @Override public void onBackPressed() { super.onBackPressed() ; overridePendingTransition(R.anim.hold, R.anim.fade_out) ; } pour ajouter des animations arrière.

1 votes

Cela devrait être la meilleure réponse propre.

1 votes

@RightHandedMonkey Pour l'ajout d'animations de retour, il vaut mieux surcharger la méthode finish() ; de l'activité pour le cas où l'activité se termine par autre chose que le bouton de retour (par exemple, un bouton de sortie personnalisé...).

50voto

monmonja Points 468

Voir les thèmes sur Android : http://developer.Android.com/guide/topics/ui/themes.html .

Sous thèmes.xml il devrait y avoir android:windowAnimationStyle où vous pouvez voir la déclaration du style en styles.xml .

Exemple de mise en œuvre :

<style name="AppTheme" parent="...">

    ...

    <item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>

</style>

<style name="WindowAnimationStyle">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>

1 votes

0 votes

3 votes

Meilleure solution .

35voto

Curtain Points 790

Dans la même déclaration dans laquelle vous exécutez finish(), exécutez votre animation là aussi. Ensuite, dans la nouvelle activité, exécutez une autre animation. Voyez ce code :

fadein.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillAfter="true">
     <alpha android:fromAlpha="1.0" 
            android:toAlpha="0.0"
            android:duration="500"/> //Time in milliseconds
</set>

Dans votre classe d'arrivée

private void finishTask() {
    if("blabbla".equals("blablabla"){
        finish();
        runFadeInAnimation();
    }
}

private void runFadeInAnimation() {
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
    a.reset();
    LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
    ll.clearAnimation();
    ll.startAnimation(a);   
}

fadeout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
           android:fillAfter="true">
  <alpha android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="500"/>
</set>

Dans votre nouvelle classe d'activité, vous créez une méthode similaire à la runFadeAnimation que j'ai écrite, puis vous la lancez dans onCreate et n'oubliez pas de changer l'id des ressources en fadeout.

1 votes

En outre, il peut être préférable d'utiliser le temps d'animation court par défaut : android:duration="@android:integer/config_shortAnimTime"

0 votes

Où est runFadeAnimation()

2 votes

Les gars, assurez-vous de voir la vraie réponse en dessous de ce post.

21voto

Mohsen mokhtari Points 1242

Utilice overridePendingTransition

startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);

fadein.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
</set>

fadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/anticipate_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

12voto

Cedriga Points 3074

Pour fadeIn y fadeOut ajoutez-la seulement après super.onCreate(savedInstanceState) dans votre nouvelle classe d'activité. Vous n'avez pas besoin de créer autre chose (pas de XML, pas de dossier anim, pas de fonction supplémentaire).

overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X