Android Osmdroid 批量添加标记和弹窗,实时刷新位置及信息
要批量添加标记和弹窗,您可以使用 osmdroid 的 OverlayItem 和 ItemizedOverlay 类来实现。
首先,创建一个类继承 ItemizedOverlay 类,用于管理所有的标记和弹窗。在这个类中,您需要重写以下方法:
- 创建一个空的 ArrayList 来存储 OverlayItem 对象。
ArrayList<OverlayItem> overlayItems = new ArrayList<>();
- 重写 size 方法,返回 OverlayItem 的数量。
@Override
public int size() {
return overlayItems.size();
}
- 重写 getItem 方法,返回指定位置的 OverlayItem 对象。
@Override
public OverlayItem getItem(int position) {
return overlayItems.get(position);
}
- 重写 createItem 方法,根据给定的经纬度创建一个新的 OverlayItem 对象。
@Override
protected OverlayItem createItem(int position) {
return overlayItems.get(position);
}
- 重写 onTap 方法,当用户点击标记时显示弹窗。
@Override
protected boolean onTap(int index) {
OverlayItem item = overlayItems.get(index);
// 显示弹窗逻辑
return true;
}
接下来,在您的 Activity 或 Fragment 中,创建 MapView 并添加 OverlayItem 和 ItemizedOverlay 对象。
- 创建 MapView 对象。
MapView mapView = findViewById(R.id.map_view);
- 创建 ItemizedOverlay 对象,并将其添加到 MapView 中。
ItemizedOverlay<OverlayItem> itemizedOverlay = new ItemizedOverlay<OverlayItem>(getApplicationContext(), overlayItems) {
// 根据实际需求重写 OverlayItem 的方法
};
mapView.getOverlays().add(itemizedOverlay);
- 添加 OverlayItem 对象到 ItemizedOverlay 中。
OverlayItem item = new OverlayItem('Title', 'Snippet', new GeoPoint(latitude, longitude));
itemizedOverlay.addItem(item);
- 刷新标记位置和弹窗内信息。
item.setPoint(new GeoPoint(newLatitude, newLongitude));
item.setTitle(newTitle);
item.setSnippet(newSnippet);
itemizedOverlay.populate(); // 刷新标记位置和弹窗内信息
这样,您就可以批量添加标记和弹窗,并实时刷新它们的位置和信息了。请根据您的实际需求进行相应的修改和适配。
原文地址: https://www.cveoy.top/t/topic/o0Hc 著作权归作者所有。请勿转载和采集!