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;
}
}