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.


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

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>



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>

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

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

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.


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>

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

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.