viewpager support studio recyclerview hacer como android html webview android-viewpager swipe

support - Vista web de Android: evita que los gestos táctiles se pasen a viewpager principal



viewpager android slide (3)

Cree su propia subclase de ViewPager y sobrescriba canScroll de la siguiente manera.

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 } }

Por supuesto, de algún modo deberá 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 controlar las coordenadas x / y de la presentación de diapositivas, otra solución podría ser utilizar gestos que comiencen en el borde de la vista como gestos de paginación y gestos que comienzan más en el área interna 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 comienza el gesto en el borde izquierdo o derecho, todo el mapa o gráfico se desliza hacia afuera:

@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; }

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

El problema es que 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 (el viewpager no se desplaza), y el viewpager para desplazarse cuando el usuario se desplaza hacia otro lado. ¿Cómo puedo hacer eso?

PS He utilizado event.preventDefault() y event.stopPropagation() en el JavaScript de la presentación de diapositivas HTML con la esperanza de que la vista web no pase los eventos táctiles al viewpager principal.


Mi idea fue implementar una función de Javascript que decida qué partes desplazarse:

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

Luego anula 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;


"canScroll" método "canScroll" de su ViewPager y permita el desplazamiento solo 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); } }