Android – Añadir GestureDetector a la vista web

Me gustaría añadir la clase GestureDetector a mi webview para que pueda administrar gestos comunes como doubletap.

Esto es lo que estoy tratando de lograr:

  • SingleTap funcionará normalmente
  • DoubleTap abrirá elementos (más información a continuación)

Respecto a DoubleTap – El sitio en cuestión tiene código fuente que define cómo se manejan los clics simples y dobles para determinados elementos. Indica que un solo clic selecciona un elemento y un doble clic abre ese elemento. Tengo que ser vago con respecto a los artículos ya que no es un sitio público.

No necesito configurar particiones o swipes. Sólo estoy tratando de recrear clics de ratón de PC simple y doble clic.

EDIT: He añadido en las siguientes sugerencias de Pat. Cambié algunas cosas a mi gusto y añadí algunas de otras fuentes.

Utilicé esta pregunta para ayudar a construir mi actividad junto con la ayuda de Pat. Utilizando el código "First Way", carga mi aplicación correctamente y vuelve a cargar la página correctamente. Ahora, sólo necesito agregar los otros manejadores de eventos y configurarlos correctamente. Publicaré el código final cuando lo consiga para trabajar y marcaré la respuesta de Pat como correcta.

Este usuario está haciendo la misma pregunta sin respuesta: Cómo hacer que funcionen dos clics.

Dice que esto se deprecia GestureDetector (nuevo MyGestureDetector ()); – ¿Debo arreglar esto?

EDIT 2: Ya que la pregunta real fue cómo agregar gesturedetecor a la webview y yo era capaz de hacerlo, voy a marcar la respuesta de Pat como correcta. A pesar de que quería hacer doubleTap = doble clic, no pedí que en mi título por lo que va a crear una nueva pregunta para eso.

import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.SslErrorHandler; import android.net.http.SslError; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; public class MainActivity extends Activity{ WebView webview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.webview); //Do we want/need to enable Java? webview.getSettings().setJavaScriptEnabled(true); //Here we allow for zoom controls - pinch webview.getSettings().setBuiltInZoomControls(true); //Here we remove the zoom control buttons - requires API 11 webview.getSettings().setDisplayZoomControls(false); //Here we clear the Cache and SSL Preferences webview.clearCache(true); webview.clearSslPreferences(); //Do we need to enable scroll bars to allow people to scroll left and right? webview.setHorizontalScrollBarEnabled(true); webview.setVerticalScrollBarEnabled(true); webview.setWebViewClient(new WebViewClient()); webview.loadUrl("website"); final GestureDetector gd = new GestureDetector(new MyGestureDetector()); View.OnTouchListener gl = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return gd.onTouchEvent(event); } }; webview.setOnTouchListener(gl); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.i("", "DoubleTapEvent"); return true; } } // Ignore SSL certificate errors public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } //Would like to have a Menu Button to refresh the page - or really just bring you to the login page - for use when the session times out @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(1, 1, 0, "Refresh"); //removed below to have only buttons show //getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.refresh: webview.loadUrl("website"); return true; } return super.onOptionsItemSelected(item); } } 

Dan

¿Usted está preguntando cómo fijar a un oyente para manejar grifos simples / dobles? Subclase GestureDetector.SimpleOnGestureListener y establecer que como un oyente de contacto en su:

 public class GestureListener extends GestureDetector.SimpleOnGestureListener { 

Y luego anular los métodos onSingleTapConfirmed para un solo toque y onDoubleTap. A continuación, establezca un oyente de contacto en su webview y onTouch simplemente llame al onTouchEvent de su GestureListener.

Editar:

  final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener()); webview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }); 
  • La vista web de Android deshabilita todos los vínculos pero habilita el desplazamiento
  • Webview no muestra la fuente Gujarati
  • Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
  • Android Cómo mostrar vínculos en la vista web de esta manera?
  • Cómo hacer un reemplazo sobre las webs cargadas en una Webview
  • WebView obtiene bajo ActionBar
  • SaveState de Webview no maneja WebViewClient personalizado
  • Cómo interceptar url cargas en WebView (android)?
  • Cómo ver la transmisión de vídeo RTSP a través de WebView en la aplicación para Android
  • Cómo establecer un título diferente para el cuadro de diálogo de alerta cuando se carga la página WebView?
  • ¿Qué está causando esto en android webView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.