Para animar la transición entre fragmentos, o para animar el proceso de mostrar u ocultar un fragmento, utiliza el Fragment Manager
para crear un Fragment Transaction
.
Dentro de cada Fragmento de transacción, puede especificar animaciones de entrada y salida que se usarán para mostrar y ocultar respectivamente (o ambas cuando se usa reemplazar).
El siguiente código muestra cómo reemplazaría un fragmento deslizando un fragmento y deslizando el otro en su lugar.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Para lograr lo mismo ocultando o mostrando un fragmento que simplemente llamarías ft.show
o ft.hide
, pasando el Fragmento que deseas mostrar u ocultar respectivamente.
Como referencia, las definiciones de animación XML usarían la objectAnimator
etiqueta. Un ejemplo de slide_in_left podría verse así:
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1280"
android:valueTo="0"
android:duration="500"/>
</set>
Si no tiene que usar la biblioteca de soporte, eche un vistazo a la respuesta de Roman .
Pero si desea usar la biblioteca de soporte , debe usar el antiguo marco de animación como se describe a continuación.
Después de consultar las respuestas de Reto y de blindstuff, he conseguido que funcione el siguiente código.
Los fragmentos aparecen deslizándose desde la derecha y deslizándose hacia la izquierda cuando se presiona hacia atrás.
El orden es importante. ¡Esto significa que debe llamar
setCustomAnimations()
antesreplace()
o la animación no tendrá efecto!A continuación, estos archivos deben colocarse dentro de la carpeta res / anim .
enter.xml :
exit.xml :
pop_enter.xml :
pop_exit.xml :
La duración de las animaciones se puede cambiar a cualquiera de los valores predeterminados como
@android:integer/config_shortAnimTime
o cualquier otro número.Tenga en cuenta que si entre reemplazos de fragmentos se produce un cambio de configuración (por ejemplo, rotación), la acción de retroceso no se anima. Este es un error documentado que todavía existe en la versión 20 de la biblioteca de soporte.
fuente
Le recomiendo que use esto en lugar de crear el archivo de animación porque es una solución mucho mejor. Android Studio ya proporciona valores predeterminados
animation
que puede usar sin crear ningún archivo XML nuevo. Los nombres de las animaciones son android.R.anim.slide_in_left y android.R.anim.slide_out_right y puede usarlos de la siguiente manera:Salida:
fuente
Mi biblioteca de soporte modificada admite el uso de animaciones de visualización (es decir
<translate>, <rotate>
) y animadores de objetos (es decir<objectAnimator>
) para las transiciones de fragmentos. Se implementa con NineOldAndroids . Consulte mi documentación en github para más detalles.fuente
En cuanto a mí, necesito la vista diraction:
Aquí funciona para mí el código:
slide_in_right.xml
slide_out_left.xml
codigo de transacción:
fuente
Resuelvo esto de la siguiente manera
fuente