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).

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 .

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); } 
  • TabLayout con viewpager no desplazamiento suave
  • ¿Hay una manera de desactivar el desvanecimiento que un viewPager tiene desplazamiento a los bordes?
  • ViewPagers en un ListView mostrando elementos de la lista en blanco
  • La clase PagerAdapter se llama varias veces
  • Vista de calendario personalizado en Android
  • ActionBar ERROR: Navegación de modo de lista no visible después de usar SearchView
  • ¿Cómo restablecer contenido de viewpager en Android?
  • Error al crear la aplicación para Android (consulte ActionBarSherlock y ViewPagerTabs) con Ant
  • Cambiar las pestañas que no funcionan al hacer clic en las pestañas con PagerSlidingTabStrips
  • Android - vista de la imagen dentro de los problemas del paginador de vista
  • Android TabsAdapter con ActionbarSherlock
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.