Top Commentators

OnTheRoad

  • Two guys and a Beer - Episode 85
  • Jam Session 2
  • Two guys and a Beer - Episode 84

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);
    1. If so,  it’s a double tap; do whatever you want (in this case I zoom in on the last clicked point);
    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);
  }
}

Related:

  1. Double click/tap detection on android's MapView If there is a cleaner way to do it,...
  2. Android location provider mock So, yeah, I resumed playing around with android, this time...

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

3 comments to Double click/tap detection on android’s MapView

  • Charizard

    I would like to say thanks!
    I’m a student and currently learning stuff about programming, and the way you just recreated the mapview just made me go “cooooooool”
    keep up the good work :)

  • Victoria

    Thank you,

    Just what I was looking for.

    I modified this slightly as I wanted to know the coords of the location the user had clicked so I could add another item to the map. So instead of getting the controller and zooming I have: getProjection().fromPixels((int)ev.getX(), (int)ev.getY());

    At that point I launch the context menu allowing the user to insert an item at that point or cancel.

    Regards
    Victoria

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>