¿Cómo puedo animar los elementos de RecyclerView cuando aparecen?
El animador de elementos predeterminado solo anima cuando se agregan o eliminan datos después de que se hayan establecido los datos del reciclador. Estoy desarrollando nuevas aplicaciones y no tengo ni idea de por dónde empezar.
¿Alguna idea de cómo lograr esto?
android
android-layout
android-recyclerview
PaulNunezM
fuente
fuente
recyclerView.scheduleLayoutAnimation()
después de cambiar el conjunto de datos; de lo contrario, la animación no funcionaría.EDITAR:
De acuerdo con la documentación del ItemAnimator :
Entonces, a menos que agregue sus elementos uno por uno
RecyclerView
y actualice la vista en cada iteración, no creo queItemAnimator
sea la solución a su necesidad.Así es como puede animar los
RecyclerView
elementos cuando aparecen con un Adaptador personalizado:Y su custom_item_layout se vería así:
Para obtener más información acerca de CustomAdapters y
RecyclerView
, consulte esta capacitación en la documentación oficial .Problemas en el desplazamiento rápido
El uso de este método podría causar problemas con el desplazamiento rápido. La vista se puede reutilizar mientras se realiza la animación. Para evitar eso, es recomendable borrar la animación cuando se separa.
En CustomViewHolder:
Vieja respuesta:
Echa un vistazo al repositorio de Gabriele Mariotti , estoy bastante seguro de que encontrará lo que necesita. Proporciona ItemAnimators simples para RecyclerView, como SlideInItemAnimator o SlideScaleItemAnimator.
fuente
onViewDetachedFromWindow
y llamaclearAnimation
a la vista. El problema es que hay animaciones ejecutándose cuando RecyclerView intenta reutilizar la vista.Animé el desvanecimiento de los
Recyclerview
elementos cuando aparecen por primera vez como se muestra en el código a continuación. Quizás esto sea de utilidad para alguien.También puede reemplazarlo
setFadeAnimation()
con lo siguientesetScaleAnimation()
para animar la apariencia de los elementos al escalarlos desde un punto:El código anterior tiene algunas verrugas en cuanto a que al desplazar los
RecyclerView
elementos siempre se desvanecen o escalan. Si lo desea, puede agregar código para permitir que la animación suceda cuandoRecyclerView
se crea el fragmento o la actividad que contiene la primera (por ejemplo, obtenga la hora del sistema en la creación y solo permita la animación durante los primeros milisegundos de FADE_DURATION).fuente
Creé animación a partir de la respuesta de pbm con poco
modification
para hacer que la aninmation se ejecute solo una vezen otras palabras el
Animation appear with you scroll down only
y en
onBindViewHolder
llamar a la funciónfuente
lastPosition
representa el número de vistas renderizadas, por lo que es el comienzo de su valor-1
, cada vez que se muestra una nueva vista comenzamos una animación y aumentamos la posiciónPuede agregar un
android:layoutAnimation="@anim/rv_item_animation"
atributoRecyclerView
como este:gracias por el excelente artículo aquí: https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
fuente
Un buen lugar para comenzar es este: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java
Ni siquiera necesita la biblioteca completa, esa clase es suficiente. Entonces, si solo implementa su clase de Adaptador dando un animador como este:
verá elementos que aparecen desde la parte inferior a medida que se desplazan, evitando también el problema con el desplazamiento rápido.
fuente
Animar elementos en la vista de reciclaje cuando están unidos en el adaptador podría no ser la mejor idea, ya que puede hacer que los elementos en la vista de reciclaje se animen a diferentes velocidades. En mi caso, el artículo al final de la vista del reciclador se anima a su posición más rápido que los que están en la parte superior, ya que los que están en la parte superior tienen que viajar más, por lo que se ve desordenado.
El código original que utilicé para animar cada elemento en la vista del reciclador se puede encontrar aquí:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Pero copiaré y pegaré el código en caso de que se rompa el enlace.
PASO 1: configure esto dentro de su método onCreate para asegurarse de que la animación solo se ejecute una vez:
PASO 2: Deberá poner este código en el método donde desea iniciar la animación:
En el enlace, el escritor está animando los iconos de la barra de herramientas, por lo que lo puso dentro de este método:
PASO 3: Ahora escriba la lógica para startIntroAnimation ():
Mi alternativa preferida:
Prefiero animar toda la vista del reciclador en lugar de los elementos dentro de la vista del reciclador.
Los PASOS 1 y 2 siguen siendo los mismos.
En el PASO 3, tan pronto como su llamada API regrese con sus datos, comenzaría la animación.
Esto animaría toda su vista de reciclador para que vuele desde la parte inferior de la pantalla.
fuente
latestPostRecyclerview
?Cree este método en su adaptador de vista de reciclaje
Y finalmente agregue esta línea de código en onBindViewHolder
setZoomInAnimation(holder.itemView);
fuente
En 2019, sugeriría poner todas las animaciones de elementos en el animador de elementos.
Comencemos declarando el animador en la vista de reciclador:
Declara el animador personalizado entonces,
Similar a las anteriores, hay una para desaparición
animateDisappearance
, para agregaranimateAdd
, para cambiaranimateChange
y moveranimateMove
.Un punto importante sería llamar a los despachadores de animación correctos dentro de ellos.
fuente
Solo extiende su adaptador como a continuación
Y agregue un súper método a onBindViewHolder
Es una forma automatizada de crear un adaptador animado como "Basheer AL-MOMANI"
fuente
Creo que es mejor usarlo así: (en el adaptador RecyclerView se anula solo un método)
Si desea cada animación adjunta allí en RV.
fuente