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)

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

  • Eliminar el espaciado predeterminado en la vista de reciclador
  • Botón de acción flotante en una actividad - ¿cómo anclar a una vista de reciclaje en un fragmento?
  • Animación de RecyclerView en el clic de artículo
  • Obtener encabezados de sección para trabajar con SuperSLiM y RecyclerView
  • RecyclerView RecyclerViewDataObserver no estaba registrado
  • Cómo configurar la aplicación RecyclerView: layoutManager = "" de XML?
  • Uso de CardView y RecyclerView en mis archivos de diseño genera una excepción
  • RecyclerView Adapter está repitiendo valores en lugares erróneos
  • NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?
  • ¿Cómo desplazarse a la parte inferior de un RecyclerView? ScrollToPosition no funciona
  • Java.lang.IllegalStateException: RecyclerView no tiene LayoutManager en Fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.