Cómo limitar los cambios de página de ViewPager a uno por gesto

Cuando utiliza setPageMargin para establecer un margen negativo en su ViewPager, las páginas serán más pequeñas que el ancho total del ViewPager. El efecto secundario de esto es que el usuario puede utilizar un gesto largo para cambiar la página activa más de una vez.

¿Hay alguna manera de evitar que un solo gesto cambie la página más de una vez?

He intentado detener los eventos de movimiento de llegar al buscapersonas, pero tendrá que dejar que el MotionEvent.ACTION_UP para pasar o el paginador no funciona correctamente. El up también activa los cálculos basados ​​en velocidad en ViewPager y causa un cambio de página adicional cuando se activa.

O necesito reajustar la velocidad de la fricción o necesito de alguna manera prevenir cambios adicionales de la página.

He utilizado el método descrito en la respuesta de esta pregunta para detener el desplazamiento, pero el problema ACTION_UP descrito me impide completarlo. ¿Es posible desactivar el desplazamiento en un ViewPager?

¿Algunas ideas?

One Solution collect form web for “Cómo limitar los cambios de página de ViewPager a uno por gesto”

No sé exactamente lo que está tratando de lograr aquí, pero en lugar de utilizar un margen negativo no sería mejor para el usuario getPageWidth () en el PagerAdapter para hacer el ancho de las páginas más pequeño que el ancho ViewPager?

Editar

Ok, he llegado con una solución 'hacky', que consiste en copiar el código fuente de ViewPager en su proyecto y modificar un poco performDrag (), por lo que no arrastrará más de una página.

Este Hack funciona con algunas suposiciones:

  1. Utiliza getPageWidth () para determinar el tamaño relativo de las páginas
  2. Todas las páginas deben devolver el mismo valor getPageWidth ()

Puede comprobar el proyecto de ejemplo y las modificaciones de ViewPager

No es una solución hermosa o elegante, pero funciona, y finalmente voy a cerrar un boleto de 3 meses de edad con este mismo problema, por lo que gerente feliz 🙂

  • Cómo personalizar el CirclePageIndicator?
  • cómo extender el WebView correctamente?
  • Guardar / Restaurar fragmentos de estado android
  • Android ViewPager cambia automáticamente la página
  • Android: ¿Cómo agregar iconos / drawables a la PagerTabStrip de la versión 4 de Android Support Lib?
  • ViewPager y fragmentos - ¿cuál es la forma correcta de almacenar el estado del fragmento?
  • El selector de pestañas no funciona en la pestaña anterior haga clic al deslizarlo en viewpager
  • ViewPager dentro del elemento de línea ListView
  • Programaticamente Ocultar Soft Keyboard en ViewPager.OnPageChangeListener onPageSelected ()?
  • Cómo colocar el botón de acción flotante exclusivamente en un fragmento sólo en el diseño de la pestaña
  • ¿Cómo eliminar las pestañas de Android ViewPager divider?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.