您可以使用 Osmdroid 的 Overlay 和 OverlayItem 来实现批量添加多种标记和弹窗,样式不同,不同的标记放入相同的图层进行管理,对位置和弹窗信息实时刷新的功能。

以下是基本的步骤:

  1. 创建自定义 Overlay 类,继承自 ItemizedOverlay 类,用于管理多个 OverlayItem。
public class CustomOverlay extends ItemizedOverlay<OverlayItem> {
    // 构造函数
    public CustomOverlay(Drawable defaultMarker, Context context) {
        super(defaultMarker, new DefaultResourceProxyImpl(context));
    }

    // 添加 OverlayItem
    public void addItem(OverlayItem item) {
        mOverlayItems.add(item);
        populate();
    }

    // 清除所有 OverlayItem
    public void clearItems() {
        mOverlayItems.clear();
        populate();
    }

    // 重写 createItem 方法,返回 OverlayItem
    @Override
    protected OverlayItem createItem(int index) {
        return mOverlayItems.get(index);
    }

    // 返回 OverlayItem 个数
    @Override
    public int size() {
        return mOverlayItems.size();
    }
}
  1. 创建多个 OverlayItem 对象,并添加到自定义 Overlay 中。
CustomOverlay overlay = new CustomOverlay(getResources().getDrawable(R.drawable.marker), this);
List<OverlayItem> items = new ArrayList<>();

// 创建多个 OverlayItem
items.add(new OverlayItem('Title1', 'Snippet1', new GeoPoint(30.12345, 120.67890)));
items.add(new OverlayItem('Title2', 'Snippet2', new GeoPoint(30.23456, 120.78901)));
items.add(new OverlayItem('Title3', 'Snippet3', new GeoPoint(30.34567, 120.89012)));

// 将 OverlayItem 添加到自定义 Overlay 中
for (OverlayItem item : items) {
    overlay.addItem(item);
}
  1. 将自定义 Overlay 添加到 MapView 中。
// 获取 MapView 对象
MapView mapView = findViewById(R.id.map_view);

// 添加自定义 Overlay
mapView.getOverlays().add(overlay);
  1. 实现 OverlayItem 的点击事件,显示弹窗。
// 实现 OverlayItem 点击事件
overlay.setOnItemGestureListener(new ItemizedOverlay.OnItemGestureListener<OverlayItem>() {
    @Override
    public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
        // 显示弹窗
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(item.getTitle());
        builder.setMessage(item.getSnippet());
        builder.setPositiveButton('确认', null);
        builder.show();
        return true;
    }

    @Override
    public boolean onItemLongPress(final int index, final OverlayItem item) {
        return false;
    }
});
  1. 实时更新 OverlayItem 的位置和弹窗信息。
// 更新 OverlayItem 位置
GeoPoint point = new GeoPoint(30.45678, 120.90123);
overlay.getItem(0).setPoint(point);

// 更新 OverlayItem 弹窗信息
overlay.getItem(0).setTitle('New Title');
overlay.getItem(0).setSnippet('New Snippet');

// 刷新自定义 Overlay
overlay.refresh();

通过以上步骤,您就可以实现批量添加多种标记和弹窗,样式不同,不同的标记放入相同的图层进行管理,对位置和弹窗信息实时刷新的功能。

Android Osmdroid 批量添加多种标记和弹窗,样式不同,实时更新位置和信息

原文地址: http://www.cveoy.top/t/topic/oXdw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录