我一直在使用OSMdroid
处理离线地图我有两个缩放级别的地图图块,即12和15
现在通常的双击将mapview缩放1级
我尝试做的是在用户双击地图后将setZoomLevel()
设为15,
有可能吗?
我尝试使用onGestureListener
,但不知何故它无效
该方向或示例代码中的任何提示或线索都将是一个很大的帮助,谢谢
答案 0 :(得分:3)
我对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
}
}
答案 1 :(得分:1)
如果你需要在MapView中管理双击,我建议你查看这个帖子:
android maps: How to Long Click a Map?
你可以看到我的答案以及我如何改编mapview-overlay-manager。
答案 2 :(得分:0)
您可以使用其事件覆盖缩放控件,因为您需要在xml布局中定义或从mapview获取缩放控件
ZoomControls zoomControls = (ZoomControls)findViewById(R.id.zoomControl);
View zoomOut = zoomControls.getChildAt(0);
zoomOut.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_out_icon));
zoomOut.setPadding(5, 5, 5, 5);
View zoomIn = zoomControls.getChildAt(1);
zoomIn.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_in_icon));
zoomIn.setPadding(5, 5, 5, 5);
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomIn();
mapView.invalidate();
}
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomOut();
mapView.invalidate();
}
});
现在您可以实现自己的缩放控制
答案 3 :(得分:0)
在最新的OSMdroid库中,内置了自动双击放大功能。但没有什么比拥有变焦控制更好。