Estoy usando Google API 8 (Android 2.2) con el paquete de soporte v4.
No da ningún error ni 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í?

Respuestas:
El administrador estaba apilando mi transacción antes de que estableciera la animación, por lo que apila la transacción sin animaciones (triste pero cierto), y eso ocurre incluso si realizo la transacción después del
setCustomAnimations().La solución es configurar las animaciones primero:
FragmentTransaction transaction = manager.beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); transaction.replace(R.id.content, myFragment); transaction.commit();fuente
transaction.something().somethingelse().replace().commit(), muchos de los métodos de Android regresanthispara que pueda evitar volver a escribir la variable, pero de alguna manera aquí expone un efecto secundario ysetCustomAnimations()debe llamarse por separadotransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);en su lugar.Como se sugirió anteriormente, las declaraciones separadas definitivamente funcionarán. Pero el truco aquí es
setCustomAnimationantes de configurar el tipo de transacción a saber.add,replaceetc. de lo contrario, no lo hará. Entonces, aplicar la misma lógicamethod chainingtambié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 lo prefiera lo
method chainingencuentre útil. ¡Salud!fuente
Dejando esto aquí porque es la pregunta más popular. Tuve el mismo problema con la transacción de fragmentos que no se animaba. El culpable fue tener el atributo
android:animateLayoutChangesestablecido entrueen el diseño contenedor.Espero que ayude a alguien a ahorrar algo de tiempo en la búsqueda de una solución, ya que puede ser difícil de notar cuando se tienen diseños anidados en diferentes archivos.
fuente
Otra razón puede ser colocar innecesariamente
fragmentTransaction.show()antes del compromiso. Esto hace que las transiciones emergentes no se muestren en algunas versiones de API de Android.fuente