Это подход, который я использовал. Я создал класс AbstractMap, который расширил MapActivity. Отсюда я расширил класс AbstractMap для создания Map, которая отвечала моим требованиям. Примечание. Я использовал этот подход только потому, что мне требовалось несколько карт с различными свойствами для моего приложения. Вы можете просто удалить ключевое слово Abstract из AbstractMap, напрямую переопределить методы OnGestureListener в этом классе и создать его экземпляр.
Вот класс AbstractMap
public abstract class AbstractMap extends MapActivity implements OnGestureListener, OnDoubleTapListener {
public MapView mapView;
public MapController mapController;
public List<Overlay> mapOverlays;
private GestureDetector detector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.mapp);
detector = new GestureDetector(this, this);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setOnTouchListener(otl);
mapController = mapView.getController();
mapOverlays = mapView.getOverlays();
} catch (Exception e) {
Log.e("Error", "Exception", e);
}
}
public OnTouchListener otl = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (detector.onTouchEvent(event))
return true;
else
return false;
}
};
}
Вот LongPressMap
public class LongPressMap extends AbstractMap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onDown(MotionEvent event) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
//Log.d("Debug","On Scrtoll");
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
Надеюсь, это поможет.