¿Cómo respondo a un toque en un MapView de Android, pero ignoro pinch-zoom?

Tengo un MapView en una actividad y funciona bien, el mapa muestra, y responde a los grifos, y puedo extraer la ubicación fácilmente. Sin embargo, este manejador también está respondiendo a la pinch-zoom, por lo que si un usuario intenta pinch-zoom, la aplicación responde como si hicieran tapping (y es muy confuso para ellos).

¿Cómo puedo responder a los golpes en un MapView y sólo recoger un solo toque, ignorando específicamente pinch-zoom y doble-taps?

¿Necesito usar OnTouchEvent () en lugar de OnTap ()? En caso afirmativo, ¿cómo distingo entre los distintos eventos táctiles y cómo puedo acceder al GeoPoint?

Aquí está el código de dentro de mi MapActivity:

class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean onTap(GeoPoint p, MapView map) { if ( p!=null ) { // Do stuff with the geopoint return true; // We handled the tap } else { return false; // We didn't handle the tap } } } 

Después de mucho rascarse la cabeza y probar varios enfoques, este está funcionando bien hasta ahora. El código sigue los eventos de movimiento. Cuando recibimos un evento ACTION_DOWN, marca la bandera isPinch como falsa (no sabemos si es una pizca o aún no), pero tan pronto como obtenemos un evento táctil (es decir, ACTION_MOVE) que involucre a dos dedos, isPinch se establece en True, y así cuando el evento onTap () se dispara, puede ver si hubo un pellizco o no.

 class MapOverlay extends com.google.android.maps.Overlay { private boolean isPinch = false; @Override public boolean onTap(GeoPoint p, MapView map){ if ( isPinch ){ return false; }else{ Log.i(TAG,"TAP!"); if ( p!=null ){ handleGeoPoint(p); return true; // We handled the tap }else{ return false; // Null GeoPoint } } } @Override public boolean onTouchEvent(MotionEvent e, MapView mapView) { int fingers = e.getPointerCount(); if( e.getAction()==MotionEvent.ACTION_DOWN ){ isPinch=false; // Touch DOWN, don't know if it's a pinch yet } if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){ isPinch=true; // Two fingers, def a pinch } return super.onTouchEvent(e,mapView); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.