recyclerview more library incremental android image scroll paging

more - Android scrollview horizontal se comporta como iPhone(paginación)



pagination android library (4)

Tengo un LinearLayout dentro de un HorizontalScrollView. El contenido es solo una imagen. Durante el desplazamiento, debo lograr el mismo comportamiento que se obtiene al configurar la opción de paginación en el iPhone equivalente al HSW (el desplazamiento de la lista debe detenerse en todas las páginas de la lista, no seguir moviéndose).

¿Cómo se hace esto en Android? ¿Debo implementar estas funciones por mí mismo o hay una propiedad particular para establecer o una subclase de HSV para implementar?



Encontré otra forma de obtener el mismo efecto y creo que es más legible. Aquí está el camino:

@Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP) { float currentPosition = hsv.getScrollX(); float pagesCount = hsv.getChildCount(); float pageLengthInPx = hsv.getMeasuredWidth()/pagesCount; int page = (int) (Math.floor((currentPosition - pageLengthInPx / 2) / pageLengthInPx) + 1); hsv.scrollTo((int) (page * pageLengthInPx), 0); } return false; }


Entonces, mi solución es:

  1. Intercepte el evento onTouch y calcule si la página debería cambiar al siguiente o mantenerse en el actual
  2. Heredar de HorizontalScrollView y anular el método computeScroll

El método computeScroll llama para mover la lista. Por defecto, supongo que está implementado para desacelerar con una cierta proporción ... Ya que no quiero este movimiento, simplemente lo anulo sin especificar un cuerpo.

El código para el controlador de eventos es:

_scrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP) { float currentPosition = _scrollView.getScrollX(); float pagesCount = _horizontalBar.getChildCount(); float pageLengthInPx = _horizontalBar.getMeasuredWidth()/pagesCount; float currentPage = currentPosition/pageLengthInPx; Boolean isBehindHalfScreen = currentPage-(int)currentPage > 0.5; float edgePosition = 0; if(isBehindHalfScreen) { edgePosition = (int)(currentPage+1)*pageLengthInPx; } else { edgePosition = (int)currentPage*pageLengthInPx; } _scrollView.scrollTo((int)edgePosition, 0); } return false; } });

Y en mi HorizontalScrollView heredado

@Override public void computeScroll (){ return; }


Me encontré con una buena solución aquí:

Localizador horizontal

Esta es una versión de GitHub del código que se encuentra aquí:

Switch de vista real

Puede parecer una exageración solo por usarlo en imágenes, pero esta solución permite una paginación infinita con un pequeño truco (es decir, cuando en la primera página puede retroceder a la última página y en la última página puede avanzar a la primera página). ). También te permite tener un número desconocido de páginas y generar contenido de forma dinámica mediante otro pequeño truco. Por favor vea mi comentario en el segundo enlace here

para detalles sobre cómo logré esto.

Espero que esto ayude.