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 ).
- ¿Son las aplicaciones IOS y Android con Webview sólo consideradas híbridas o aplicaciones Web?
- Cambiar usuario o volver a autenticar con Instagram
- Envoltura de HTML en una aplicación para Android
- Android 4.1 webview javascript no funciona.
- Vista web de Android: evita que los gestos táctiles se pasen a la vista principal de los padres
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
- WebViewClient shouldInterceptRequest Congela el WebView
- ¿Qué es más seguro: navegador externo o ChromeTab para autorización?
- Aumentar el tamaño de la cuota WebSQL en un WebView
- Cómo acceder a mi 127.0.0.1:8000 desde Android tablet
- Imágenes borrosas en el navegador Android de stock
- Tratando de conectar la aplicación de Android a .NET ".svc" webservice y el servidor responde Tipo de soporte no compatible
- Cómo deshabilitar el desplazamiento horizontal en la vista web de Android
- Conexión de cliente a servidor en aplicaciones de chat como Viber o Telegram
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.
- Proguard: excluir el frasco externo de la biblioteca de la ofuscación
- Establecer android: windowIsFloating programmatically