以下是使用osmdroid批量添加自定义标记和自定义弹窗的步骤:

  1. 导入osmdroid库并添加到项目中。

  2. 创建自定义标记类,继承自osmdroid的OverlayItem类,并在构造函数中设置标记类型。

public class CustomMarker extends OverlayItem {

    private MarkerType type;

    public CustomMarker(GeoPoint geoPoint, String title, String snippet, MarkerType type) {
        super(title, snippet, geoPoint);
        this.type = type;
    }

    public MarkerType getType() {
        return type;
    }
}
  1. 创建自定义弹窗类,继承自osmdroid的InfoWindow类,并重写onOpen方法,在该方法中设置弹窗样式。
public class CustomInfoWindow extends InfoWindow {

    private Context context;
    private CustomMarker marker;

    public CustomInfoWindow(int layoutResId, MapView mapView, CustomMarker marker) {
        super(layoutResId, mapView);
        this.context = mapView.getContext();
        this.marker = marker;
    }

    @Override
    public void onOpen(Object arg0) {
        TextView titleTextView = (TextView) mView.findViewById(R.id.title);
        TextView snippetTextView = (TextView) mView.findViewById(R.id.snippet);

        switch (marker.getType()) {
            case TYPE_A:
                // 设置弹窗样式 A
                break;
            case TYPE_B:
                // 设置弹窗样式 B
                break;
            case TYPE_C:
                // 设置弹窗样式 C
                break;
        }

        titleTextView.setText(marker.getTitle());
        snippetTextView.setText(marker.getSnippet());
    }

    @Override
    public void onClose() {
        // 关闭弹窗时的操作
    }
}
  1. 在地图上添加自定义标记,并设置自定义弹窗。
List<CustomMarker> markers = new ArrayList<>();
markers.add(new CustomMarker(new GeoPoint(latitude1, longitude1), "title1", "snippet1", MarkerType.TYPE_A));
markers.add(new CustomMarker(new GeoPoint(latitude2, longitude2), "title2", "snippet2", MarkerType.TYPE_B));
markers.add(new CustomMarker(new GeoPoint(latitude3, longitude3), "title3", "snippet3", MarkerType.TYPE_C));

for (CustomMarker marker : markers) {
    marker.setMarker(getResources().getDrawable(R.drawable.marker_icon));
    marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    map.getOverlays().add(marker);
    map.getOverlays().add(new CustomInfoWindow(R.layout.custom_info_window, map, marker));
}
  1. 在地图上添加大量的自定义标记时,可以使用osmdroid的ItemizedIconOverlay类来进行优化。
ItemizedIconOverlay<CustomMarker> markerOverlay = new ItemizedIconOverlay<>(getContext(), new ArrayList<>(), null);
for (CustomMarker marker : markers) {
    marker.setMarker(getResources().getDrawable(R.drawable.marker_icon));
    marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    markerOverlay.addItem(marker);
    markerOverlay.setInfoWindow(new CustomInfoWindow(R.layout.custom_info_window, map, marker));
}
map.getOverlays().add(markerOverlay);

通过以上步骤,即可批量添加自定义标记和自定义弹窗,并且不同的标记类型可以加载不同的弹窗样式,同时优化了添加大量标记时的性能

android 使用osmdroid批量添加自定义标记和自定义弹窗 不同的标记类型 加载不同的弹窗样式并优化

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

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