Android – Reajustes de desplazamiento de ViewPager
Estoy usando un ViewPager
en mi aplicación que alberga un diseño horizontal de imágenes para implementar una galería paginada.
Cuando pruebo la vista sola, es decir, como la vista principal de una actividad, funciona bien. Sin embargo, cuando incluyo esto como parte de otro diseño, el desplazamiento (o flicking) se vuelve raro. Si parece volver a su posición original alrededor de la mitad de un golpe (películas realmente rápidas son lo único que he llegado a trabajar hasta el momento).
- ViewPager ¿Fragmentos que se destruyen con el tiempo?
- Onclick en paginador de vista en android no funciona en mi código
- Pestañas deslizantes dentro de las pestañas de la barra de acciones
- Viewpager + webview, cómo detener la carga de la webview
- Cambio de orientación con viewPager dentro de FragmentActivity
Alguna idea de cual puede ser el problema ?
Sólo en caso de que sea de cualquier relevancia, la vista se infla de XML y se agrega en una clase heredada de PagerAdapter
.
- Despliegue de la disposición de la barra de herramientas con Viewpager dentro de NestedScrollView
- Custom ViewPager para permitir que el control GoogleMap infantil se desplace horizontalmente
- Problemas de rendimiento de Android ViewPager al utilizar el fondo
- Android ViewPager cambia automáticamente la página
- Android ViewPager Detectar desplazamiento vertical
- ¿Cómo desplazar la vista web horizontalmente dentro de ViewPager?
- El ViewPagerIndicator no es fácil con 1000 páginas
- Establecer la altura de Viewpager dentro de Scrollview en android
Sí, ViewPager
y otros elementos de desplazamiento no juegan bien juntos por defecto. Cuando tengo que hacer esas cosas, por lo general subclase ViewPager
para hacer algo que es consciente de los niños que pueden desplazarse. Entonces en mi onInterceptTouchEvent()
compruebo si el rect de golpe está dentro de ese niño y no intercepto el acontecimiento del tacto así que el niño tiene un whack en él. Algo como esto:
/** * Override to not intercept touch events within our scroller if it exists. */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(scrollerId != 0) { View scroller = findViewById(scrollerId); if(scroller != null) { Rect rect = new Rect(); scroller.getHitRect(rect); if(rect.contains((int)ev.getX(), (int)ev.getY())) { return false; } } } return super.onInterceptTouchEvent(ev); }
Entonces todo lo que necesitas es una manera de configurar que scrollerId
(funciona un simple método público).
Tenga en cuenta otra manera es si está utilizando un ScrollView
para desplazar verticalmente elementos con los niños ViewPager
, tendrá que ir en una dirección diferente. Tener una subclase de ScrollView
que detecta direcciones de desplazamiento vertical y bails para desplazamiento horizontal para que el ViewPager
recoja.
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; lastX = ev.getX(); lastY = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - lastX); yDistance += Math.abs(curY - lastY); lastX = curX; lastY = curY; if (xDistance > yDistance) return false; } return super.onInterceptTouchEvent(ev); }
- Android GridView imperfección, cómo eliminar espacio en blanco extra a la derecha
- ¿Cómo rastrear el campo que está causando NullPointerException al insertar un campo personalizado en la tabla de datos de contactos?