Giro a la izquierda / derecha de Android en la actividad de WebView (haciendo clic en vínculos y desplazamiento vertical)

SOLVED, la solución está debajo.

Quiero reemplazar los botones de navegación en webview a 2 gestos de deslizar – izquierda y derecha deslizar. Este Android: Cómo manejar de derecha a izquierda gesto de gestos de enlace realmente me ayudó, pero me encontré con el problema – después de la aplicación de este código No pude hacer clic en los enlaces o desplazarse a través de la página web cargado en la actividad de webview (he utilizado la primera respuesta de posibles respuestas ).

Entonces me enteré de que en otra respuesta en esta pregunta es algo similar – cómo desplazarse en listview – https://stackoverflow.com/a/20005481/3272449 , pero no pude conseguirlo corriendo. En logcat consigo esta información de depuración: http://s27.postimg.org/5qfipgi1v/message.png

Este es mi OnSwipeTouchListener:

import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class OnSwipeTouchListener implements OnTouchListener { private final GestureDetector gestureDetector = new GestureDetector(new GestureListener()); public boolean onTouch(final View view, final MotionEvent motionEvent) { return gestureDetector.onTouchEvent(motionEvent); } private final class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_THRESHOLD = 100; private static final int SWIPE_VELOCITY_THRESHOLD = 100; @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { boolean result = false; try { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { onSwipeRight(); } else { onSwipeLeft(); } } } } catch (Exception exception) { exception.printStackTrace(); } return result; } } public void onSwipeRight() { } public void onSwipeLeft() { } public GestureDetector getGestureDetector(){ return gestureDetector; } } 

Y mi actividad de webview (despojada):

 public class WebViewActivity extends Activity { private WebView browser; private OnSwipeTouchListener onSwipeTouchListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); onSwipeTouchListener = new OnSwipeTouchListener() { public void onSwipeRight() { Toast.makeText(WebViewActivity.this, "right", Toast.LENGTH_SHORT).show(); } public void onSwipeLeft() { Toast.makeText(WebViewActivity.this, "left", Toast.LENGTH_SHORT).show(); } }; browser.setOnTouchListener(onSwipeTouchListener); } // end of onCreate @Override public boolean dispatchTouchEvent(MotionEvent ev){ onSwipeTouchListener.getGestureDetector().onTouchEvent(ev); return super.dispatchTouchEvent(ev); } } // end of WebViewActivity 

¿Cómo hacer que el desplazamiento izquierdo / derecho, desplazamiento vertical y haciendo clic en los enlaces que trabajan al mismo tiempo?

SOLUCIÓN: La misma pregunta resuelta: Fling Gesture y Webview en Android

No estoy lo suficientemente familiarizado con el GestureDetector para diagnosticar de forma fiable su problema. Una cosa que puedes intentar es clonar el evento:

 @Override public boolean dispatchTouchEvent(MotionEvent ev){ onSwipeTouchListener.getGestureDetector().onTouchEvent(MotionEvent.obtain(ev)); return super.dispatchTouchEvent(ev); } 

En caso de que otra manera de abordar esto es usar onOverScrolled en lugar de un GestureDetector :

 @Override protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) { if (scrollX > (getWidth() + THRESHOLD) && clampedX) { onSwipeLeft(); } if (scrollX < - THRESHOLD && clampedX) { onSwipeRight(); } super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); } 

Esto supone que su contenido no es normalmente desplazable de lado sin embargo.

  • No puedo conectarme a mi servicio web
  • Pestaña servidores no visible en eclipse v3.7.2
  • Android WebView ZoomManager.onSizeChanged NullPointerException
  • Guardar el estado de WebView y restaurar en ANDROID
  • ¿Cómo seleccionar y copiar texto en una vista que no está asociada a una actividad?
  • ¿Cuál es la mejor manera de apoyar métodos obsoletos que son reemplazados por otros nuevos?
  • Cargar HTML estático en Webview
  • El banner de instalación de la aplicación no funciona
  • Obtenga las cookies de la vista web con ruta y fecha de caducidad
  • Android: ZoomPicker se rompe enTouchListener
  • Detectar clic en el botón HTML a través de javascript en Android WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.