2010-08-18 15 views
91

Je commence une activité et préfère avoir un fondu alpha pour startActivity(), et un fondu sortant pour le finish(). Comment puis-je aller dans le SDK Android?Puis-je modifier l'animation de transition Android startActivity()?

+1

http: // stackoverflow.com/questions/8319465/comment-changer-toutes-les-transitions-d'activité-à-une-application-android-unique/8319701 # 8319701 –

Répondre

33

Dans la même déclaration dans laquelle vous exécutez finish(), exécutez votre animation aussi. 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 arrivée classe

private void finishTask() { 
    if(blabbla==blablabla){ 
     finish(); 
     runFadeAnimation(); 
    } 
} 

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 un similaire méthode comme le runFadeAnimation que j'ai écrit et ensuite vous l'exécutez dans onCreate et n'oubliez pas de changer l'id de ressources pour fadeou t.

+1

En outre, il peut être mieux d'utiliser le temps d'animation court par défaut: '' 'android: durée =" @ android: integer/config_shortAnimTime "' '' – elimirks

+0

où est 'runFadeAnimation()' – Choletski

+0

Les gars, s'il vous plaît assurez-vous de voir la vraie réponse ci-dessous ce post. –

28

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

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

mise en œuvre Exemple:

<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

http://www.maxters.net/2011/05/android- animation-between-activity-switching-using-theme/ –

+0

Mettre à jour les liens pour themes.xml et styles.xml https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res /res/values/themes.xml https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml – vovahost

251

A partir du niveau de l'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); 
+13

Ajouter quelque chose comme: \t @Override \t public void onBackPressed() { \t \t super.onBackPressed(); overridePendingTransition (R.anim.hold, R.anim.fade_out); \t} pour ajouter des animations de retour. – RightHandedMonkey

+1

devrait-il fonctionner avec 'startActivityForResult()'? –

+0

Cela devrait être la meilleure réponse propre. – cy198706

3

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 l'animation de votre choix.

8

Utilisez 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> 
+1

Vous êtes magnifique merci. Ça fonctionne bien – Sam

3

Pour fadeIn et fadeOut, ajoutez seulement après ce 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);