滚动后 OsmDroid 加载标记

OsmDroid load Marker after scroll

我想在滚动后加载标记。在 Google 地图中,我使用 OnCameraChange,在 OsmDroid 中,我使用 OnScroll,但在我移动地图之前总是被调用。如何检测滚动何时结束为 OnCameraChange ?

如果我的理解是正确的,osmdroid 本身不支持它(基本上是 onScrollEnd)。那正确吗?您想要在滚动结束时有一个事件吗?

On Scroll 仅在地图处于平移过程中时触发。如果您遇到不同的行为,则可能是错误。事实上,不久前也有类似的报道。它应该在 5.2 或更新的 osmdroid

中修复

要在滚动完成后触发,我建议跟踪最后一个 onScroll 事件的时间,然后在后台线程中定期检查最后一个事件的时间戳。

另一种选择是扩展 org.osmdroid.views.overlay.DefaultOverlayManager 并覆盖您想要的任何按键或触摸事件。

然后您可以将您的自定义覆盖管理器附加到地图视图 mapView.setOverlayManager(yourManager);

如果你的意思是after scroll

  • 地图的当前可见部分已更改
  • scroll/zoom 包括动画已经完成
  • 最后 200 毫秒没有 scroll/zoom

您可以尝试添加一个 DelayedMapListener 作为地图侦听器,在最后一个 scrolling/zooming

之后触发 200 毫秒
/** Fire if there is more than 200 millisecs no zoom/scroll update markers */
protected static final int DEFAULT_INACTIVITY_DELAY_IN_MILLISECS = 200;

    // If there is more than 200 millisecs no zoom/scroll update markers
    mMapView.setMapListener(new DelayedMapListener(new MapListener() {
        @Override
        public boolean onScroll(ScrollEvent event) {
            reloadMarker();
            return false;
        }

        @Override
        public boolean onZoom(ZoomEvent event) {
            reloadMarker();
            return false;
        }
    }, DEFAULT_INACTIVITY_DELAY_IN_MILLISECS));
OSMmap.setMapListener(new DelayedMapListener(new MapListener() {

        public boolean onZoom(final ZoomEvent e) {
            reloadMarker();
            return true;
        }

        public boolean onScroll(final ScrollEvent e) {
        reloadMarker();
        return true;
       }
}, 1000 ));