package com.readystatesoftware.maps; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import com.google.android.maps.MapView; public class TapControlledMapView extends MapView implements OnGestureListener { private GestureDetector gd; private OnSingleTapListener singleTapListener; public TapControlledMapView(Context context, AttributeSet attrs) { super(context, attrs); setupGestures(); } public TapControlledMapView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setupGestures(); } public TapControlledMapView(Context context, String apiKey) { super(context, apiKey); setupGestures(); } private void setupGestures() { gd = new GestureDetector(this); //set the on Double tap listener gd.setOnDoubleTapListener(new OnDoubleTapListener() { public boolean onSingleTapConfirmed(MotionEvent e) { if (singleTapListener != null) { return singleTapListener.onSingleTap(e); } else { return false; } } public boolean onDoubleTap(MotionEvent e) { TapControlledMapView.this.getController().zoomInFixing((int) e.getX(), (int) e.getY()); return false; } public boolean onDoubleTapEvent(MotionEvent e) { return false; } }); } /* * (non-Javadoc) * @see com.google.android.maps.MapView#onTouchEvent(android.view.MotionEvent) */ @Override public boolean onTouchEvent(MotionEvent ev) { if (this.gd.onTouchEvent(ev)) { return true; } else { return super.onTouchEvent(ev); } } public void setOnSingleTapListener(OnSingleTapListener singleTapListener) { this.singleTapListener = singleTapListener; } public boolean onDown(MotionEvent e) { return false; } public void onShowPress(MotionEvent e) {} public boolean onSingleTapUp(MotionEvent e) { return false; } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } public void onLongPress(MotionEvent e) {} public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } }