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

Réponses:

33

Dans la même instruction dans laquelle vous exécutez finish (), exécutez également votre animation. Ensuite, dans la nouvelle activité, exécutez une autre animation. Voir 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 Activity, vous créez une méthode similaire comme runFadeAnimation que j'ai écrite, puis vous l'exécutez dans onCreate et n'oubliez pas de changer l'id des ressources en fadeout.

Rideau
la source
1
De plus, il peut être préférable d'utiliser le temps d'animation court par défaut:android:duration="@android:integer/config_shortAnimTime"
elimirks
où estrunFadeAnimation()
Choletski
2
Les gars, assurez-vous de voir la vraie réponse sous cet article.
Développeur Android
qu'est-ce que blabbla ?? !!
Ali Khaki
288

À partir du niveau d'API 5, 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);
Allen Chan
la source
17
Ajoutez quelque chose comme: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } pour ajouter des animations de retour.
RightHandedMonkey
1
Cela devrait être la meilleure réponse claire.
cy198706
1
@RightHandedMonkey Pour ajouter des animations de retour, mieux vaut remplacer le finish (); méthode de l'activité pour le cas où l'activité se termine par autre chose que le bouton retour (par exemple un bouton de sortie personnalisé ...).
Itiel Maimon du
43

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

Sous themes.xml, il devrait y avoir un android:windowAnimationStyleendroit où vous pouvez voir la déclaration du style dans styles.xml .

Exemple d'implémentation:

<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>
monmonja
la source
1
maxters.net/2011/05/…
Dawid Drozd
3
Meilleure solution .
Abhishek kumar
Comment accéderiez-vous à @android:anim/fade_inpartir du code java?
Tamoxin
18

Utilisation 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>
Mohsen mokhtari
la source
9

Pour fadeIn et fadeOut , ajoutez ceci uniquement après super.onCreate (savedInstanceState) dans votre nouvelle classe Activity. 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);
Cedriga
la source
1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z le
9

Si vous souhaitez toujours la même animation de transition pour l'activité

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}
Farid Z
la source
4

Vous pouvez simplement créer un contexte et faire quelque chose comme ci-dessous: -

private Context context = this;

Et votre animation: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

Vous pouvez utiliser n'importe quelle animation de votre choix.

Julfikar
la source
1

Je voulais utiliser la solution styles.xml, mais cela ne fonctionnait pas pour moi avec les activités. Il s'avère qu'au lieu d'utiliser android:windowEnterAnimationet android:windowExitAnimation, je dois utiliser les animations d'activité comme celle-ci:

<style name="ActivityAnimation.Vertical" parent="">
    <item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>
Daniel Zolnai
la source
0
 // CREATE anim 

 // CREATE animation,animation2  xml // animation like fade out 

  Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
  Bundle bndlanimation1 =  ActivityOptions.makeCustomAnimation(getApplicationContext(), 
  R.anim.animation, R.anim.animation2).toBundle();
  tartActivity(myIntent1, bndlanimation1);
Ashif
la source
0

La plupart des réponses sont assez correctes, mais certaines d'entre elles sont obsolètes, comme lors de l'utilisation de R.anim.hold et certaines d'entre elles ne font qu'élaborer le processus.

Ainsi, vous pouvez utiliser:

startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
RAWNAK YAZDANI
la source