Cómo cambiar las animaciones utilizadas por el mecanismo de animateLayoutChanges?
Tengo un RecyclerView
en el cual el usuario selecciona un artículo. Al seleccionar una determinada vista se hace visible antes del texto (ver imagen). Quiero animar su apariencia.
Representación grafica
- Disposición de Android con botones cuadrados
- Vista personalizada para ActionBar.Tab no se muestra correctamente
- ¿Cuáles son las nuevas características de Android Design Support Library y cómo usar su Snackbar?
- ¿Dónde puedo encontrar el archivo xml de configuración predeterminado de AlertDialog?
- ¿Es válida la guía de diseño de iconografía Android para Android 5 / Diseño de material
animateLayoutChanges
propiedad en el diseño del elemento hace el trabajo perfectamente, a excepción del tipo de animación para ver la apariencia – se desvanece pulg. Quiero que escala de 0 a 100% de tamaño, creo que se llama 'pop up' de animación.
Si deshabilito animateLayoutChanges
y uso animación XML para eso, funciona, pero el texto cercano ya no está animado (debe deslizarse para acomodar espacio para la vista y su margen). Desplaza instantáneamente hacia la derecha y luego se reproduce la animación. Esto es peor con la animación inversa, ya que el texto se superpone a la vista antes de que desaparezca.
Así que necesito combinar el mecanismo por defecto y mi propia animación de alguna manera. ¿Cuál sería la manera más sencilla de lograr eso sin profundizar en animaciones personalizadas?
- Android: Cómo evitar que el diseño se presione cuando se invoca el teclado
- Arquitectura de la aplicación de Android: ¿cuál es el modelo sugerido?
- ¿Cómo anular (o ocultar) los atributos de estilo definidos en el proyecto de la biblioteca de Android?
- Cómo deshabilitar el desplazamiento de NestedScrollView & CollapsingToolbarLayout, por ejemplo, cuando no hay más contenido a continuación?
- Cambio del tema de la aplicación en tiempo de ejecución mediante el uso de archivos de temas externos
- Mejor manera de crear una barra de herramientas inferior en android.
- Inserción de una vista de texto en medio de una vista de imagen de Android
- Diseño de material de Android
Después de mucho excavar en los lugares equivocados, encontré la respuesta yo mismo. Podría ayudar a alguien.
animateLayoutChanges
propiedad animateLayoutChanges
si está habilitada utiliza una instancia de LayoutTransition
para realizar su trabajo en ViewGroup
.
Así que para cambiar las animaciones, puede crear una instancia de LayoutTransition
, establecer Animator
para la transición que necesita cambiar y luego asignar esa instancia a ViewGroup
través de setLayoutTransition()
.
En mi caso el resultado es:
Animator scaleDown = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 1, 0), PropertyValuesHolder.ofFloat("scaleY", 1, 0)); scaleDown.setDuration(300); scaleDown.setInterpolator(new OvershootInterpolator()); Animator scaleUp = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 0, 1), PropertyValuesHolder.ofFloat("scaleY", 0, 1)); scaleUp.setDuration(300); scaleUp.setStartDelay(300); scaleUp.setInterpolator(new OvershootInterpolator()); LayoutTransition itemLayoutTransition = new LayoutTransition(); itemLayoutTransition.setAnimator(LayoutTransition.APPEARING, scaleUp); itemLayoutTransition.setAnimator(LayoutTransition.DISAPPEARING, scaleDown); ViewGroup av = (ViewGroup)v.findViewById(R.id.animated_layout); av.setLayoutTransition(itemLayoutTransition);
Más información en la documentación de referencia de LayoutTransition .
- Conjunto de enlaces de datos de Android alignParentTop
- ¿La altitud GPS de Android es incorrecta debido a que no incluye la altura del geoide?