ViewPager con WebView que permite pasar y no permitir el desplazamiento de WebView

Estoy utilizando ViewPager y WebView para presentar el contenido HTML como un libro electrónico. En algunas páginas del ViewPager estoy permitiendo que el TouchEvent sea ​​manejado por el WebView y en algunas páginas estoy permitiendo que el ViewPager maneje el TouchEvent por sí mismo reemplazando el método onInterceptTouchEvent en el ViewPager (algunas páginas están teniendo TextViews y Buttons sin WebView 1st Y la última página aquí). Aquí está el código para el mismo –

 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (getCurrentItem() == 0 || getCurrentItem() == getAdapter().getCount() - 1) return false; else { if (ev.getAction() == MotionEvent.ACTION_DOWN) { return false; } return true; } } 

Estoy desautorizando nuevamente el desplazamiento fijando OnTouchListener en el WebView usando el siguiente código-

 contentView.setOnTouchListener((v, event) -> { if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_MOVE) { ((BigBeeViewPager) v.getParent().getParent()).onInterceptTouchEvent(event); } return true; }); 

Problema que estoy enfrentando es – Cuando estoy tratando de deslizar el ViewPager desde el centro de las páginas que no funciona. Tengo que empezar a filtrar desde el final de las páginas. Sin embargo, funciona bien para las páginas que no tienen WebView ¿Cómo permitir que comience a pasar desde el lugar en las páginas.

Este comportamiento es similar a la aplicación de Android de Gmail donde ViewPager contiene el WebView y Swiping está disponible desde cualquier lugar. No soy capaz de averiguar cómo lo han hecho.

Nota – Cuando estoy interceptando todos los TouchEvent para el WebView también deshabilita el clic largo y la selección de texto, lo cual no es deseable.

Gracias de antemano por la ayuda.

Aquí tienes hombre – un viejo problema con una buena solución.

Echa un vistazo aquí Scroll webview horizontalmente dentro de un ViewPager

Tienes que crear un GestureDetector e implementarlo en una Webview como esta:

 GestureDetector gestureDetector=new GestureDetector(new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent motionEvent) { return false; } @Override public void onShowPress(MotionEvent motionEvent) { } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return false; } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; } @Override public void onLongPress(MotionEvent motionEvent) { } @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; } }); webView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!v.hasFocus()) { v.requestFocus(); } break; } gestureDetector.onTouchEvent(event); return false; } }); 

Y eliminar el Interceptor de Viewpager y utilizar el predeterminado sin ningún cambio

Sin embargo MarkySmarky es extremadamente útil para encontrar la solución, pero todavía me gustaría escribir la parte de respuesta para que otras personas pueden obtener ayuda.

Resolví el problema reemplazando el método

 protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) 

De ViewPager y devolver false si v es la instancia de WebView . Esto no es permitir que el desplazamiento de WebView sí mismo y, por tanto, ViewPager tratarlo como un niño que no se desplaza y, por tanto, el deslizamiento de obras desde cualquier lugar de la página.

Finalmente mi ViewPager está pareciendo-

 public class BigBeeViewPager extends ViewPager { public BigBeeViewPager(Context context) { super(context); } public BigBeeViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { return !(v instanceof ObservableWebView) && super.canScroll(v, checkV, dx, x, y); } } 
  • Cómo almacenar cada posición de la página viewpager en la lista de ellos?
  • Galería: Efecto en el elemento seleccionado
  • Android View onSaveInstanceState no se llama
  • Los Fragmentos de ViewPager desaparecen
  • TabLayout y ViewPager -Tabs no funcionan después de pasar entre los elementos de cajones deslizantes
  • Barra de herramientas y TabLayout no son visibles en dispositivos Android 4.4
  • Implemente el cajón deslizante con el visor donde se encuentra el cajón deslizante en el visor
  • ViewPager.setOffscreenPageLimit (0) no funciona como se esperaba
  • Android - ¿Cómo puedo localizar el indicador de pestañas entre las dos pestañas TextViews?
  • ¿Quieres usar ViewPager, no puede obtener android.support. * Ser reconocido?
  • Error al inflacionar la clase android.support.v4.view.ViewPager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.