Determinar la vista que aparece en LayoutManager pre-layout

Quiero apoyar las animaciones predictivas en mi LayoutManager personalizado cuando el elemento se mueve desde fuera de los límites de la pantalla visible hasta el punto visible.

Todas las operaciones de llenado que hago en el onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) .

De acuerdo con una documentación para apoyar las animaciones predictivas en la etapa de pre-diseño ( state.isPreLayout() ) i debe establecer las condiciones iniciales para la animación de cambio (por ejemplo, lugar que aparecen vistas en algún lugar)

El problema es que no puedo encontrar una manera de determinar en el pre-diseño que las vistas se van a mover desde fuera, porque soy capaz de operar sólo con corriente adjunta a RecyclerView vistas y onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) se llama después de la fase de pre-diseño. (Por ejemplo onItemsRemoved se llama antes de pre-layout)

¿Es el error con LayoutManager o podría de alguna manera determinar en el pre-diseño que las vistas se van a mover pronto?

PS: soy capaz de mantener la animación de predicción de punto visible a fuera, porque soy capaz de bucle a través de vistas visibles y determinar con recycler.convertPreLayoutPositionToPostLayout cuáles van a ser movidos.

 //childViews is an iterable over RecyclerView items for (View view : childViews) { RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); boolean probablyMovedFromScreen = false; if (!lp.isItemRemoved()) { //view won't be removed, but maybe it is moved offscreen int pos = lp.getViewLayoutPosition(); //start view is a first visible view on screen int lowestPosition = getPosition(startView); int highestPosition = getPosition(endView); pos = recycler.convertPreLayoutPositionToPostLayout(pos); probablyMovedFromScreen = pos < lowestPosition || pos > highestPosition; } if (probablyMovedFromScreen) { //okay this view is going to be moved } } 

Este artículo me ha ayudado mucho, pero tampoco describe una animación que necesito.

PPS: LinearLayoutManager no admite dicha animación también. (Solo hay una simple animación de desvanecimiento)

One Solution collect form web for “Determinar la vista que aparece en LayoutManager pre-layout”

No sabes qué elementos estarán visibles, pero sabes qué elementos desaparecerán (o cambiarán) de manera que basándote en eso, puedes estimar cuánto espacio es necesario en qué dirección. Puede comprobar el código de LinearLayoutManager para ver cómo funciona. También puede leer estos artículos acerca de los detalles del sistema RecyclerView.

http://www.birbit.com/recyclerview-animations-part-1-how-animations-work http://www.birbit.com/recyclerview-animations-part-2-behind-the-scenes

  • ScrollBy no funciona correctamente en recyclerview anidado
  • La creación de clase Pojo desde el cursor Sqlite está tomando demasiado tiempo
  • Establecer contentInset en RecyclerView
  • Eliminar fila de RecyclerView
  • Recyclerview Adaptador y Glide - misma imagen cada 4-5 filas
  • Tipos incompatibles: no se puede emitir el visor a imageviewholder
  • Android 5.0 - Agregar cabecera / pie de página a un RecyclerView
  • Implementar un RecyclerView en un fragmento
  • Guardar contenido de EditText en RecyclerView
  • GetAdapterPosition () no es un método
  • Múltiples elementos seleccionados RecyclerView in Activity.java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.