Doble toque: acercar Android MapView?

Después de un poco de trabajo, mi aplicación de ruta funciona bien. Lo único que quiero agregar es una función de zoom de doble toque, pero no sé cómo.

¿Podría darme una pista?

Implementar GestureListener para recibir eventos doubleTap.

ver: detección de gestos de Fling en el diseño de la cuadrícula

También he estado buscando una respuesta / ejemplo, pero no encontré ningún código de trabajo.

Finalmente, aquí está el código que me funciona:

MyMapActivity.java

public class MyMapActivity extends MapActivity implements OnGestureListener, OnDoubleTapListener { private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView)findViewById(R.id.mapView); } @Override public boolean onDoubleTap(MotionEvent e) { int x = (int)e.getX(), y = (int)e.getY();; Projection p = mapView.getProjection(); mapView.getController().animateTo(p.fromPixels(x, y)); mapView.getController().zoomIn(); return true; } // Here will be some autogenerated methods too 

OnDoubleTap.java

 public class OnDoubleTap extends MapView { private long lastTouchTime = -1; public OnDoubleTap(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { long thisTime = System.currentTimeMillis(); if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) { // Double tap this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY()); lastTouchTime = -1; } else { // Too slow lastTouchTime = thisTime; } } return super.onInterceptTouchEvent(ev); } } 

main.xml

     

No olvides reemplazar aquí el valor android:apiKey con tu apiKey .

Aquí hay una implementación agradable y directa:

Doble toque Zoom en la actividad de GoogleMaps

(una respuesta tardía para todos aquellos que estudian esta pregunta)

Una publicación anterior, lo sé, pero esta solución también funciona: haga doble clic / toque sobre el zoom del mapa (Android)

Creo que arregló sus errores en su propia publicación, así que usa la parte de la pregunta, no las respuestas (son horribles :))

Usa el siguiente código cuando quieras acercar y alejar

  1. hacer doble clic en la parte superior 50% de la vista de mapa
  2. Alejar hacer doble clic en la parte inferior 50% de la vista de mapa
 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { long thisTime = System.currentTimeMillis(); DisplayMetrics metrics = new DisplayMetrics(); WindowManager wm = (WindowManager) activity.getSystemService(activity.getApplicationContext().WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) { // Double tap if((height/2)>ev.getY()){ // Zoom IN this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY()); }else{ this.getController().zoomOutFixing((int) ev.getX(), (int) ev.getY()); //Zoom Out } lastTouchTime = -1; } else { // Too slow lastTouchTime = thisTime; } } return super.onInterceptTouchEvent(ev); } 

En caso de que alguien esté buscando la respuesta para el nuevo GoogleMap (desde Google-Play-service: 9+)

 case MotionEvent.ACTION_DOWN: x1 = m.getX(); if ((System.currentTimeMillis() - systemTime) < 200) { mGoogleMap.animateCamera(CameraUpdateFactory.zoomIn()); } systemTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: systemTime = System.currentTimeMillis(); ... break;