android 使用osmdroid批量添加自定义标记和自定义弹窗 不同的标记类型 加载不同的弹窗样式并优化
以下是使用osmdroid批量添加自定义标记和自定义弹窗的步骤:
-
导入osmdroid库并添加到项目中。
-
创建自定义标记类,继承自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;
}
}
- 创建自定义弹窗类,继承自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() {
// 关闭弹窗时的操作
}
}
- 在地图上添加自定义标记,并设置自定义弹窗。
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));
}
- 在地图上添加大量的自定义标记时,可以使用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);
通过以上步骤,即可批量添加自定义标记和自定义弹窗,并且不同的标记类型可以加载不同的弹窗样式,同时优化了添加大量标记时的性能
原文地址: http://www.cveoy.top/t/topic/hr5v 著作权归作者所有。请勿转载和采集!