Double click/tap detection on android's MapView

 

If there is a cleaner way to do it, please share :)

1. Override the default MapView with your own implementation;
2. Override the onInterceptTouchEvent method;
3. Check if the last event was also a click and happened close by (say in the last 250ms);
  3.1. If so,  it’s a double tap; do whatever you want (in this case I zoom in on the last clicked point);
  3.2. If not, ignore :)

Here’s the code (Sorry for the formatting mess, but... :)):

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;

import com.google.android.maps.MapView;

public class MyMapView extends MapView {

  private long lastTouchTime = -1;

public MyMapView(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 < 250) {

        // Double tap
        this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
        lastTouchTime = -1;

      } else {

  // Too slow :)
  lastTouchTime = thisTime;
  }
    }

 

    return super.onInterceptTouchEvent(ev);

  }

}

About

Genius. Incredible. Remarkable. Awesome. Cool. On top of that, I am extremely humble too.