transaction studio fragments fragmentactivity example begintransaction begin backstack android android-fragments android-support-library

android - studio - FragmentTransation setCustomAnimations no funciona



fragmenttransaction fragmentactivity (3)

Intento usar el nuevo paquete de compatibilidad de Android para incluir fragmentos en mi proyecto. Estoy tratando de incluir una animación de transición cuando agrego un nuevo fragmento. La cosa es solo uno de mis trabajos de animación. La animación In funciona pero la animación Out no funciona. Leí en alguna parte que es un error en el paquete de compatibilidad. Pero también leí que el error se corrigió en la tercera revisión del paquete de compatibilidad. ¿Puede alguien ayudarme con este problema?

En animacion

<translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/anticipate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="100%" android:toYDelta="0%" android:duration="1000"/>

Fuera de animación

<translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:zAdjustment="top" android:fromYDelta="0%" android:toYDelta="100%" android:duration="1000"/>

Este es el código que uso para agregar fragmentos.

newFragment = new HelloWorldFragment(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.bottom_top_animation, R.anim.top_bottom_animation); ft.add(R.id.outer_layout, newFragment); ft.addToBackStack(null); ft.commit();


Esto funciona en la versión actual de la biblioteca, pero definitivamente se rompió anteriormente. Puedes usar algo como esto:

final FragmentManager fm = getSupportFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down) .add(R.id.fragment_container, new SomeFragment(), FRAGMENT_TAG) .addToBackStack(FRAGMENT_TAG) .commit();

donde R.anim.slide_up es tu animación y R.anim.slide_down es tu animación de salida. El segundo par de parámetros (3 y 4) para setCustomAnimations le permite especificar las animaciones de entrada / salida para hacer estallar el backstack (por ejemplo, cuando el usuario presiona hacia atrás, el fragmento se animará con la animación especificada como el cuarto parámetro).


He encontrado una solución para esto. Sobrescriba onCreateAnimation (int transit, boolean enter, int nextAnim) en su clase de fragmentos y luego está funcionando bien.

@Override public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { return enter ? AnimationUtils.loadAnimation(getActivity(), R.anim.grow_fade_in_center) : AnimationUtils.loadAnimation(getActivity(), R.anim.shrink_fade_out_center); }


También estoy enfrentando el mismo problema, aquí está mi situación:

  1. Quiero hacer un cambio de interfaz de usuario después de salir de la animación. Pero encontré que la animación de salida no funcionó. mis códigos de cambio de UI están en onBackPressed ().

Mi solución es la siguiente:

  1. mover la lógica de cambio de la interfaz de usuario en onCreateAnimator (). y luego sale la animación funciona.