滚动后OsmDroid加载标记

时间:2016-09-03 11:17:38

标签: android osmdroid

我想在滚动后加载标记。在谷歌地图我用户OnCameraChange,在OsmDroid中我使用了OnScroll,但在我移动地图之前一直被调用。如何检测滚动结束时的OnCameraChange?

3 个答案:

答案 0 :(得分:2)

如果您的意思是after scroll

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

您可以尝试添加DelayedMapListener作为地图侦听器,在最后一次滚动/缩放后触发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));

答案 1 :(得分:0)

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

On Scroll仅在地图处于平移过程中时触发。如果您遇到不同的行为,那可能就是一个错误。事实上,很久以前就报道了类似的事情。它应该在5.2或更新的osmdroid中修复

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

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

然后,您可以使用此功能将自定义叠加管理器附加到地图视图 mapView.setOverlayManager(yourManager);

答案 2 :(得分:0)

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