2011-11-30 21 views
30

Sé que puedo cambiar transición actividad utilizando el siguiente código justo después de startActivity() o acabado()¿Cómo cambiar todas las transiciones de actividad a la vez en la aplicación de Android?

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

Pero si tengo diez actividades en mi aplicación, que tienen que hacer eso diez veces; y es bastante difícil de modificar. Así que me pregunto si hay una forma de establecer la transición para todas las actividades dentro de la aplicación a la vez. ¿Hay alguna configuración correspondiente en AndroidManifest.xml?

Gracias!

Respuesta

52

Desea crear primero una <style> en res/styles.xml, así:

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

continuación, puede aplicar el estilo a un tema, en el mismo archivo:

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

Y finalmente aplique el tema a sus actividades en el manifiesto:

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

Mire estos enlaces para de referencia r:

+20

Funciona! En realidad, cambio un poco: ' ' –

+0

@DavidLiu, las animaciones abiertas parecen que están trabajando, pero las animaciones cercanos no toma efecto – toobsco42

+0

@GenLiu me puede mostrar su. ejemplos xml? Simplemente no puedo ver la diferencia entre openexit y cerrar enter, por ejemplo –

13

Sé que esto ha sido contestada, pero aquí es lo que he hecho en la mía. Todavía admitimos la API 14, por lo que faltan algunas animaciones que tuve que incorporar al proyecto desde la API 22 (slide_in_right, slide_out_left). Lo que hace es deslizarse en las pantallas cuando abre una nueva actividad y desliza la de cierre hacia la izquierda. Cuando presiona hacia atrás, hará lo opuesto, deslizando desde la izquierda la pantalla anterior y cerrando a la derecha la pantalla actual.

<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> 
+0

Directamente desde la biblioteca API 22, solo descargue la fuente de la API 22 y estará en la carpeta de animación. – JPM

6

Mi solución es, en general, como la respuesta de JPM. Pero aquí hay algunos archivos adicionales que puede necesitar.

<!-- 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> 

Crear anim carpeta bajo la carpeta res y luego crear estos archivos de animación de cuatro:

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> 
+0

esto no funciona en absoluto, al menos no en android 6 (huawei p8) – qkx

+0

Está funcionando sin problemas en mi huawei gPlay mini (Android 6) y Nexus 9 (Android 7). Ejecute este proyecto: https://github.com/ShohanAhmed/Android-Activity-Transition-Custom-Animation –

+0

investigué un problema, y ​​tiene usted razón en parte. También se ejecuta en mi teléfono, pero solo cuando llamas a intención (para mostrar actividad nueva) de la actividad. Si desea abrir alguna actividad desde el widget y usar intención pendiente, no está funcionando allí. En este caso, la única opción es establecer animaciones programáticamente en código como lo mencioné originalmente .... – qkx

Cuestiones relacionadas