overridependingtransition library fragments entre animaciones activities android animation transactions transitions android-fragments

android - library - overridependingtransition fragment



Animar fragmentos y la pila posterior (3)

Tengo problemas para usar o comprender cómo las FragmentTransactions emergentes de la pila posterior manejan las animaciones personalizadas. Específicamente, espero que llame la animación de "salida", pero parece que no.

Tengo un método simple para manejar una transacción de fragmento (FragmentTransaction) donde agrego un fragmento y aplico una transición personalizada para que se desvanezca o se desvanezca. También estoy agregando esto a la pila posterior para que el usuario pueda deshacer esa transacción con el botón Atrás, esencialmente navegando hacia el estado antes de que se agregara el fragmento.

protected void changeFragment() { FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); ft.add(R.id.fragment_container, new TestFragment()); ft.addToBackStack(null); ft.commit(); }

Todo funciona muy bien en el futuro, pero cuando el usuario hace clic en el botón Atrás, las animaciones de transición no se revierten. Lo que esperaba era que cuando el fragmento fuera eliminado, usaría la animación de fundido de salida. En cambio, parece salir (sin animación) y luego el contenedor parece desvanecerse. No estoy seguro de que esto sea exactamente lo que está sucediendo, pero el fragmento definitivamente no se está desvaneciendo.

Mi aplicación usa la biblioteca de compatibilidad para agregar compatibilidad con fragmentos, pero supongo que esto también se aplica a Honeycomb (android-11). ¿Alguien sabe si estoy haciendo algo mal aquí o si solo estoy esperando demasiado? Idealmente, me gustaría animar los fragmentos de manera similar a cómo lo hace Gmail (en el Xoom) en cuanto a seguir adelante haciendo clic en un mensaje y luego de vuelta usando el botón Atrás. Preferiblemente no tener que anular la funcionalidad del botón de retroceso y continuar con mi propio estado de fragmento ya que podría tener varias "transacciones" de las que me gustaría dar marcha atrás y no soy fanático de reinventar las ruedas.

También se le preguntó en el Grupo de Desarrolladores de Android: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9



Es un error, mira el code.google.com/p/android/issues/… . Uno de los miembros del proyecto de Android comentó que la solución era demasiado tarde para el lanzamiento 3.1, pero debería llegar a la próxima versión.

El mismo miembro continúa diciendo que ...

El problema es que las mismas animaciones se ejecutan en una operación pop como se ejecutaron para colocar los fragmentos en sus lugares actuales. Por ejemplo, en el ejemplo deslizante anterior, en una operación hacia adelante (empujando el fragmento anterior en la pila y moviendo el nuevo fragmento a la vista), deslizamos el fragmento viejo hacia afuera desde el centro hacia la izquierda y deslizamos el nuevo fragmento desde el derecho al centro Cuando se saca la pila, se ejecutan estas mismas animaciones: el fragmento más reciente se anima "hacia afuera" deslizándolo desde la derecha hacia el centro (después de lo cual desaparece, ya que se está eliminando). El viejo fragmento se saca de la pila y se anima desde el centro hacia la izquierda ... justo al lado de la pantalla.


Yo uso esto:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);

y las transiciones funcionan a la inversa cuando se presiona el botón Atrás.