Vista web de Android: evita que los gestos táctiles se pasen a la vista principal de los padres

Tengo un viewpager que contiene muchas vistas del niño; Cada vista secundaria es una vista web. Cada webview tiene algunos objetos HTML con los que el usuario puede interactuar; Por ejemplo, una presentación de diapositivas que funciona en gestos de desplazamiento o un círculo arrastrable que el usuario puede mover alrededor del lienzo HTML.

El problema es cuando el usuario realiza un gesto en estos objetos HTML, el viewpager se desplaza a la siguiente vista. Quiero que los objetos HTML funcionen cuando el usuario interactúa con ellos (viewpager no se desplaza) y el viewpager para desplazarse cuando el usuario desliza en otro lugar. ¿Cómo puedo hacer eso?

Webviews dentro de Viewpager

PS He utilizado event.preventDefault() y event.stopPropagation() en el JavaScript de la presentación de diapositivas de HTML con la esperanza de que la vista web no pasará eventos de contacto a padre viewpager.

Anular el método "canScroll" de su ViewPager y permitir el desplazamiento sólo si la vista no es una instancia de WebView .

Muestra:

 public class MyViewPager extends ViewPager { public MyViewPager (Context context) { super(context); } public MyViewPager (Context context, AttributeSet attrs) { super(context, attrs); } @Override protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { if(v instanceof WebView){ return true; } return super.canScroll(v, checkV, dx, x, y); } } 

Mi idea era implementar una función Javascript que decide qué partes desplazar:

 function checkScroll(x, y){ var o = document.elementFromPoint(x, y); result = $('div.swiper-container').find(o).length; MyAndroidInterface.processReturnValue(result); } 

A continuación, anule estos dos métodos:

 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: homepage.callJavascript("checkScroll(" + Math.round(ev.getX()) + "," + Math.round(ev.getY()) + ")"); return super.onTouchEvent(ev); case MotionEvent.ACTION_MOVE: if (homepage.scrollSlideshowLock()) return false; 

Cree su propia subclase de ViewPager y sobrescriba canScroll como sigue.

 class MyViewPager extends ViewPager { ... @Override protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { if (isInsideSlideShow(x,y)) { return true; // allow the slide show its own scrolling } else { return false; // ViewPager scrolls } } 

Usted de alguna manera, por supuesto, necesita saber qué parte de la pantalla está cubierta por la presentación de diapositivas. Este conocimiento debe ser implementado en el método isInsideSlideShow.

Si no puede obtener las coordenadas x / y de la presentación de diapositivas, otra solución podría ser utilizar gestos que comiencen en el borde mismo de la vista como gestos de paginación y gestos que comienzan más en el área interior como gestos de presentación de diapositivas.

Estoy utilizando este enfoque para un paginador de vista que muestra un mapa y un gráfico. Ambos están apoyando su propia panorámica. Pero cuando el usuario inicia el gesto en el borde izquierdo o derecho, todo el mapa o gráfico se desliza:

 @Override protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { int width = getWidth(); int slideWidth = Math.round(width * 0.15f); if (x < slideWidth || x > width - slideWidth) { return false; } return true; } 
  • Los datos Xml se convierten en datos Json en android
  • Cambiar la selección de texto a rtl en lugar de predeterminar ltr
  • ¿Son las aplicaciones IOS y Android con Webview sólo consideradas híbridas o aplicaciones Web?
  • Obtener enlace de clic de evento en una vista web Android
  • cómo guardar y restaurar Webview Estado?
  • WebView.draw () no funciona correctamente en la última versión de WebView de Android System
  • Impedir el cierre automático del portal en cautiverio después de la autenticación (Android)
  • Envoltura de HTML en una aplicación para Android
  • ¿Cómo capturar una vista web a bitmap en Android?
  • ¿Cómo se puede pasar JSON a AngularJS en la vista web de Android?
  • Cómo autenticar servicio web sap con ksoap2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.