Cuando los listitems se desplazan rápidamente, setOnScrollListener no funciona
He intentado implementar la lista de encabezados pegajosa que se describe en el tutorial de
Http://javatechig.com/android/listview-header-parallax-with-sticky-view-in-android
- Adición de elementos al reciclado sin fin con RecyclerView con un reciclado ReverseLayout
- Android setOnScrollListner en RecyclerView obsoleta
- SwipeRefreshLayout dentro de ViewPager
- Android "más suave" ocultación de la barra de herramientas al desplazarse
- ¿Cómo implementar una lista interminable con RecyclerView?
El problema es cuando se desplaza la lista muy rápido, el encabezado no se mueve a la parte superior de la pantalla como se desee.
Intenté registrar el valor de topY y heroTopY en el siguiente método.
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { /* Check if the first item is already reached to top.*/ if (view.getFirstVisiblePosition() == 0) { View firstChild = listView.getChildAt(0); topY = 0; if (firstChild != null) { topY = firstChild.getTop(); Log.d("topY", "" + topY); } heroTopY = stickyViewSpacer.getTop(); Log.e("heroTopY", "" + heroTopY); Log.d("topY,heroTopY", topY + "," + heroTopY); stickyView.setY(Math.max(0, heroTopY + topY)); // Set the image to scroll half of the amount that of ListView heroImageView.setY(topY * 0.5f); } }
La salida del registro es:
09-01 17:35:23.692 19530-19530/com.javatechig.parallaxlistview D/topY﹕ 0 09-01 17:35:23.692 19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500 09-01 17:35:23.692 19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ 0,500 09-01 17:35:23.856 19530-19530/com.javatechig.parallaxlistview D/topY﹕ -29 09-01 17:35:23.856 19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500 09-01 17:35:23.856 19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -29,500 09-01 17:35:23.873 19530-19530/com.javatechig.parallaxlistview D/topY﹕ -72 09-01 17:35:23.873 19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500 09-01 17:35:23.873 19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -72,500 09-01 17:35:23.892 19530-19530/com.javatechig.parallaxlistview D/topY﹕ -84 09-01 17:35:23.892 19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500 09-01 17:35:23.892 19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -84,500
Como se ve en la salida del registro, el valor topY se atasca en 84 y por lo tanto el encabezado. ¿Cómo resolver esto ?? Cualquier solución sería útil!
- La vista Recyclerview no funciona con setNestedScrollingEnabled y nunca recicla ninguna vista
- OnScrollChanged encender varias veces para desplazarse final en scrollView
- Ocultar y mostrar el botón flotante mientras que los rollos de ListView
- Problema de RecyclerView OnScrollListener ()
- RecyclerView ScrollListener dentro de NestedScrollView
- RecyclerView scrollToPosition no dispara scrollListener
- SwipeRefreshLayout interferir con setOnScrollListener
Agregue estas líneas
if (view.getFirstVisiblePosition() == 0) { ..... ..... } else { stickyView.setY(0); }
Es porque cuando el primer elemento sale de la vista que no obtiene dentro si declaración significa topY no se actualiza por lo que tiene que establecer su stickyView.setY () a 0 en la declaración else.