web-dev-qa-db-fra.com

Comment changer toutes les transitions d'activité à la fois dans l'application Android?

Je sais que je peux changer la transition d'activité en utilisant le code suivant juste après startActivity () ou finish ()

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

Mais si j'ai dix activités dans mon application, je dois le faire dix fois; et c'est assez difficile à modifier. Je me demande donc s'il existe un moyen de définir la transition pour toutes les activités dans l'application en même temps. Existe-t-il une configuration correspondante dans AndroidManifest.xml?

Merci!

42
Gen Liu

Vous voulez d'abord créer un <style> dans res/styles.xml, comme ceci:

    <style name="YourAnimation.Activity" parent="@Android:style/Animation.Activity"> 
       <item name="Android:windowEnterAnimation">@anim/your_in_down</item>
       <item name="Android:windowExitAnimation">@anim/your_out_down</item>
    </style>

Ensuite, vous pouvez appliquer le style à un thème, dans le même fichier:

    <style name="YourTheme" parent="Android:Theme.Translucent">
       ...
       <item name="Android:windowAnimationStyle">@style/YourAnimation.Activity</item>
    </style>

Et enfin, appliquez le thème à vos activités dans le manifeste:

    <activity
        Android:name=".YourActivity"
        Android:theme="@style/YourTheme" />

Regardez ces liens pour référence:

62
gianpi

Je sais que cela a été répondu, mais voici ce que j'ai fait dans le mien. Nous prenons toujours en charge l'API 14, il manque donc certaines animations que j'ai dû extraire du projet à partir de l'API 22 (slide_in_right, slide_out_left). Cela permet de faire glisser les écrans lorsque vous ouvrez une nouvelle activité et de faire glisser la fermeture vers la gauche. Lorsque vous appuyez en arrière, il fera alors le contraire, en faisant glisser de gauche l'écran précédent et en fermant à droite l'écran actuel.

<style name="YourTheme" parent="Android:Theme.Translucent">
   ...
    <item name="Android:windowAnimationStyle">@style/YourAnimation.Activity</item>
</style>

<style name="YourAnimation.Activity" parent="@Android:style/Animation.Activity">
    <item name="Android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="Android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="Android:activityCloseEnterAnimation">@Android:anim/slide_in_left</item>
    <item name="Android:activityCloseExitAnimation">@Android:anim/slide_out_right</item>
</style>
18
JPM

Ma solution est principalement comme la réponse JPM. Mais voici quelques fichiers supplémentaires dont vous pourriez avoir besoin.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="Android:windowAnimationStyle">@style/CustomActivityAnimation</item>

</style>

<style name="CustomActivityAnimation" parent="@Android:style/Animation.Activity">
    <item name="Android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="Android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="Android:activityCloseEnterAnimation">@anim/slide_in_left</item>
    <item name="Android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>

Créez un dossier anim sous dossier res, puis créez ces quatre fichiers d'animation:

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="100%p" Android:toXDelta="0"
        Android:duration="@Android:integer/config_mediumAnimTime"/>
</set>

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="0" Android:toXDelta="-100%p"
        Android:duration="@Android:integer/config_mediumAnimTime"/>
</set>

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="-100%p" Android:toXDelta="0"
        Android:duration="@Android:integer/config_mediumAnimTime"/>
</set>

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="0" Android:toXDelta="100%p"
        Android:duration="@Android:integer/config_mediumAnimTime"/>
</set>
10
My solution is mostly like of others...
 <style name="YourAnimation.Activity" parent="@Android:style/Animation.Activity">
        <item name="Android:windowEnterAnimation">@anim/slidefromright</item>
        <item name="Android:windowExitAnimation">@anim/slidetoright</item>
    </style>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="Android:windowAnimationStyle">@style/YourAnimation.Activity </item>
    </style>


</resources>
0
Sahil Bansal