android - oncreateviewholder - RecyclerView: animar elemento de tamaño
recyclerview android dependency (2)
Bien, he encontrado una solución que no implica llamar a notifyItemChanged
para que la vista no se reemplace. La desventaja es que debe verificar manualmente la consistencia de la vista. Para eso, he creado una pequeña biblioteca que permite exactamente lo que estaba buscando, para 5 loc en ViewHolder.
El truco es animar el cambio de altura manualmente en lugar de usar una Transición de Diseño.
Tengo un RecyclerView
. Cada uno de sus elementos de la vista de reciclador se puede ampliar o no. Solo puede haber un elemento expandido al mismo tiempo.
En esencia, estoy tratando de recrear la lista de historial en lolipop dialier.
He encontrado que el uso de LayoutTransition en RecyclerView hace que se bloquee .
Pero no he podido animar correctamente el cambio de vista de elemento entre ambos estados.
He intentado getItemAnimator().setSupportsChangeAnimations(true)
junto con notifyItemChanged(getPosition())
pero hay dos problemas:
- La vista se vuelve a crear, lo que hace que la transición sea bastante extraña, ya que se desvanece sobre el siguiente elemento al mismo tiempo que se mueve. La nueva vista que aparece no está cambiando de tamaño, ya está en tamaño completo.
- A medida que la vista se vuelve a crear, la vista anterior se desvanece y la nueva se desvanece, lo que hace que el color de fondo de la vista parpadee.
También he intentado configurar una LayoutTransition
de LayoutTransition
en la vista de elementos durante la duración de la animación, pero el problema con este enfoque es que el diseño de RecycleView se actualiza de inmediato y no sigue la animación.
He creado un pequeño proyecto de demostración de este problema para ambos intentos. Las fuentes de los proyectos están aquí .
¿Cómo puedo crear una transición suave en el cambio de diseño del elemento?
Solo debes usar notifyItemChanged(getPosition(), new Object())
lugar.
En su adaptador, anule onBindViewHolder(GigExtraViewHolder holder, int position, List<Object> payloads)
, si la carga útil es nula o está vacía, realice sus lógicas de enlace originales; de lo contrario, solo haga su propia animación de expandir / contraer.