滚动后 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 ));
我想在滚动后加载标记。在 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
/** 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 ));