Top Commentators

  • 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);
  }
}
Share:
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Reddit
  • Twitter
  • HackerNews
  • FriendFeed
  • Hyves
  • RSS

Related:

  1. Double click/tap detection on android's MapView
  2. Android location provider mock

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

  • 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>