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

  • Diseño cuadrado en GridLayoutManager para RecyclerView
  • Pasar los datos de los elementos de los clics hechos por RecyclerView CardView a la actividad
  • Adición de un fondo de color con texto / icono debajo de la fila de swiped cuando se utiliza RecyclerView de Android
  • Eliminar el espaciado predeterminado en la vista de reciclador
  • RecyclerView - animar el cambio de las columnas del gestor de diseño de cuadrícula
  • Animación de RecyclerView en el clic de artículo
  • RecyclerView almacena / restaura el estado entre las actividades
  • ¿Cómo evitar la reordenación de elementos en StaggeredGridLayoutManager después del cambio de orientación?
  • Hace notificydatasetchanged llamada onCreateViewHolder al usar RecyclerView
  • Cómo importar RecyclerView para Android L-preview
  • ¿Cómo aplicar setItemChecked (position, true) con RecyclerView en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.