【发布时间】:2016-09-03 11:17:37
【问题描述】:
我想在滚动后加载标记。在谷歌地图中我使用 OnCameraChange,在 OsmDroid 中我使用 OnScroll,但在我移动地图之前总是被调用。如何检测滚动何时以 OnCameraChange 结束?
【问题讨论】:
我想在滚动后加载标记。在谷歌地图中我使用 OnCameraChange,在 OsmDroid 中我使用 OnScroll,但在我移动地图之前总是被调用。如何检测滚动何时以 OnCameraChange 结束?
【问题讨论】:
如果你的意思是after scroll
您可以尝试添加 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));
【讨论】:
如果我的理解是正确的,osmdroid 本身并不支持它(基本上是 onScrollEnd)。那正确吗?你想在滚动结束时发生一个事件吗?
On Scroll 仅在地图处于平移过程中时触发。如果您遇到不同的行为,则可能是错误。事实上,不久前也有类似的报道。它应该在 osmdroid 5.2 或更新版本中修复
要在滚动完成后触发,我建议跟踪最后一个 onScroll 事件的时间,然后在后台线程中定期检查最后一个事件的时间戳。
另一个选项是扩展org.osmdroid.views.overlay.DefaultOverlayManager 并覆盖您想要的任何按键或触摸事件。
然后,您可以使用此方法将自定义覆盖管理器附加到地图视图
mapView.setOverlayManager(yourManager);
【讨论】:
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 ));
【讨论】: