1

我一直在使用OSMdroid 制作离线地图

我有两个缩放级别的地图图块,即 12 和 15

现在通常的双击将地图视图缩放 1 级

我想做的是setZoomLevel()在用户双击地图后 15 点,

是否可以?

我尝试使用onGestureListener,但不知何故它不起作用

在那个方向或示例代码上的任何提示或线索都会有很大帮助,谢谢

4

4 回答 4

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
        }
    }
于 2012-01-04T14:41:19.427 回答
1

如果您需要管理 MapView 中的双击,我建议您检查此线程:

android maps:如何长按地图?

您可以看到我的答案以及我如何调整mapview-overlay-manager

于 2012-01-04T11:49:45.310 回答
0

您可以使用其事件覆盖缩放控件,因为您需要在 xml 布局中定义,或者您从地图视图中获取缩放控件

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

现在您可以实现自己的缩放控制

于 2012-01-04T11:42:21.093 回答
0

In the latest OSMdroid library 4.0 has inbuilt automatic double tap zoom in. But nothing is better than having a zoom control.

于 2014-03-20T06:05:48.590 回答