У меня было такое же требование с Osmdroid MapView, в котором я не хотел, чтобы он выполнял функцию «центрирование в месте двойного касания и увеличение» по умолчанию.Я хотел, чтобы он поднял тост.В моем случае у меня был оверлей поверх MapView, поэтому я просто использовал оверлей, использующий двойной метод в методе onDoubleTap.Для ваших целей вы можете просто добавить наложение, которое ничего не рисует, но имеет собственную функцию двойного нажатия.
Так что в конце вашего onCreate вы можете добавить наложение.Это маленькое приложение, кажется, демонстрирует то, что вы хотите - (вам нужно добавить условный код для проверки уровня масштабирования и других манипуляций):
public class OsmdroidDemoMap extends Activity {
private MapView mMapView;
private MapController mMapController;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.osm_main);
mMapView = (MapView) findViewById(R.id.mapview);
mMapView.setTileSource(TileSourceFactory.MAPNIK);
mMapView.setBuiltInZoomControls(true);
mMapController = mMapView.getController();
mMapController.setZoom(13);
GeoPoint gPt = new GeoPoint(51500000, -150000);
mMapController.setCenter(gPt);
DummyOverlay dumOverlay = new DummyOverlay(this);
List<Overlay> listOfOverlays = mMapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(dumOverlay);
}
public class DummyOverlay extends org.osmdroid.views.overlay.Overlay {
public DummyOverlay(Context ctx) {
super(ctx); // TODO Auto-generated constructor stub
}
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) {}
@Override
public boolean onDoubleTap(MotionEvent e, MapView mapView) {
// This stops the 'jump to, and zoom in' of the default behaviour
int zoomLevel = mMapView.getZoomLevel();
mMapController.setZoom(zoomLevel + 3);
return true;// This stops the double tap being passed on to the mapview
}
}