overridependingtransition fragments example entre animations animaciones android android-fragments android-animation

fragments - Android-Animación personalizada en la transacción de fragmento no se está ejecutando



overridependingtransition fragment (3)

Estoy usando Google API 8 (Android 2.2) con el paquete de soporte v4.

No da ningún error o animación.

Transacción:

FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.content, myFragment); transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); transaction.commit();

Animaciones:

slide_in_left.xml

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

slide_out_right.xml

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

¿Alguien sabe lo que está pasando aquí?


Como se sugirió anteriormente, las declaraciones separadas definitivamente funcionarán. Pero el truco aquí es establecer la setCustomAnimation antes de configurar el tipo de transacción viz. add , replace , etc. de lo contrario no es así. Entonces, aplicando la misma lógica, el method chaining también funciona. p.ej.

getSupportFragmentManager().beginTransaction(). setCustomAnimations(R.anim.a_slide_up, R.anim.a_slide_down, R.anim.a_slide_up, R.anim.a_slide_down). add(R.id.root_layout, MyFrag.newInstance(). addToBackStack("MyFrag"). commit();

Poniéndolo aquí, para que alguien que prefiera el method chaining encuentre útil. ¡Aclamaciones!


Dejar esto aquí ya que es la pregunta más popular. Tuve el mismo problema con la transacción de fragmentos sin animación. El culpable era tener el atributo android:animateLayoutChanges establecido en true en el diseño que lo contiene.

Espero que ayude a alguien a ahorrar algo de tiempo buscando una solución, ya que puede ser difícil de notar cuando tiene diseños anidados en diferentes archivos.


El administrador estaba acumulando mi transacción antes de configurar la animación, por lo que apila la transacción sin animaciones (triste pero cierto), y eso ocurre incluso si setCustomAnimations() la transacción después de setCustomAnimations() .

La solución es establecer primero las animaciones:

FragmentTransaction transaction = manager.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); transaction.replace(R.id.content, myFragment); transaction.commit();