0

我正在使用 nutiteq SDK 加载地图 mbtiles。

我得到了在缩放/旋转/倾斜/拖动发生时触发的事件。但是根据文档,所有这一切都在一个听众之下。

示例代码:

public class MyMapEventListener extends MapEventListener {

    private final MapView mapView;
    private final LocalVectorDataSource vectorDataSource;

    public MyMapEventListener(MapView mapView, LocalVectorDataSource vectorDataSource) {
        this.mapView = mapView;
        this.vectorDataSource = vectorDataSource;
    }
    @Override
    public void onMapMoved() {
       // super.onMapMoved();

        Toast.makeText(mapView.getContext(),(int)mapView.getZoom()+"",Toast.LENGTH_SHORT).show();

    }

onMapMoved()当方法被调用时,我如何确定发生了哪个事件(旋转/缩放/倾斜/拖动) ?

4

1 回答 1

1

您可以获取并记住最后一个MapView状态,并与新状态进行比较 - 如果缩放发生更改,则它是缩放等。准备好一个手势可以包含多个事件(例如,可以缩放和旋转以相同的运动)。

但是为什么你需要这些事件呢?通常应用程序不需要它,也许有更好的方法来实现相同的应用程序功能。

我想根据缩放级别在地图上显示区域标签

好的,这是一个不同的问题,正如我所怀疑的 :) 有一些方法可以在不监听地图事件的情况下进行基于缩放级别的对象显示,因此显示控制会自动为您完成。您的地图视图甚至可以倾斜,那么整个地图区域的缩放级别就不同了,并且基于侦听器的技巧的性能在任何情况下都会很糟糕。

因此,正确的解决方案是使用不同的图层,并限制每个图层的缩放,如下所示。请注意,您可以LocalVectorDataSource对两个图层使用相同的数据源(可能您有)。

    // 1. Initialize a local vector data source and layer
    LocalVectorDataSource vectorDataSource = new LocalVectorDataSource(proj);

    // Initialize a vector layer with the previous data source
    VectorLayer vectorLayer = new VectorLayer(vectorDataSource);

    // Add the previous vector layer to the map
    mapView.getLayers().add(vectorLayer);

    // Set visible zoom range for the vector layer
    vectorLayer.setVisibleZoomRange(new MapRange(10, 24));

    // Now add the text to the vectorDataSource:
    // Create text style
    TextStyleBuilder textStyleBuilder = new TextStyleBuilder();
    textStyleBuilder.setColor(new Color(0xFFFF0000));
    textStyleBuilder.setOrientationMode(BillboardOrientation.BILLBOARD_ORIENTATION_FACE_CAMERA);

    // Add text
    Text textpopup1 = new Text(proj.fromWgs84(new MapPos(24.653302, 59.422269)),
                                                  textStyleBuilder.buildStyle(),
                                                  "My text");
    vectorDataSource.add(textpopup1);
于 2015-10-07T13:14:17.847 回答