web-dev-qa-db-fra.com

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

Je commence une activité et je préférerais avoir un fondu alpha pour startActivity() et un fondu sortant pour la finish(). Comment puis-je m'y prendre dans le SDK Android?

106
coneybeare

Dans la même instruction dans laquelle vous exécutez finish (), exécutez également votre animation. Ensuite, dans la nouvelle activité, lancez 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 ta 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 à celle que j'ai écrite avec runFadeAnimation, puis vous l'exécutez dans onCreate sans oublier de changer l'ID des ressources en fadeout.

33
Curtain

À partir du niveau 5 de l'API, vous pouvez appeler immédiatement overridePendingTransition 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);
278
Allen Chan

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 .

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>
37
monmonja

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>
15
Mohsen mokhtari

Pour fadeIn et fadeOut, ajoutez-le uniquement après super.onCreate (savedInstanceState) dans votre nouveau 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);
8
Cedriga

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 que vous voulez.

5
Mohammad Julfikar

Si vous voulez 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);
    }
}
5
Farid Z