osmdroid如何保证一个图标只有一个弹窗 刷新也不会新建。 减少内存增加和泄漏给出详细代码
要保证一个图标只有一个弹窗,并且刷新时不会新建弹窗,可以使用osmdroid的Marker类来实现。下面是一个示例代码:
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.Marker;
import org.osmdroid.views.overlay.Overlay;
import org.osmdroid.views.overlay.infowindow.InfoWindow;
public class CustomMarker extends Marker {
private InfoWindow mInfoWindow;
public CustomMarker(MapView mapView) {
super(mapView);
}
public CustomMarker(MapView mapView, InfoWindow infoWindow) {
super(mapView);
mInfoWindow = infoWindow;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView) {
if (mInfoWindow != null) {
if (isInfoWindowShown()) {
closeInfoWindow();
} else {
showInfoWindow();
}
return true;
}
return super.onSingleTapConfirmed(event, mapView);
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
if (isInfoWindowShown() && mInfoWindow != null) {
mInfoWindow.draw(mMapView, canvas, mapView.getProjection());
}
}
}
在上面的示例代码中,自定义了一个CustomMarker类,继承自osmdroid的Marker类。在构造方法中可以传入一个InfoWindow对象,用于显示弹窗内容。在onSingleTapConfirmed方法中,判断是否已经显示了弹窗,如果是则关闭弹窗,否则显示弹窗。在draw方法中,如果弹窗已经显示,则调用InfoWindow的draw方法绘制弹窗。
使用时,可以在创建Marker时传入一个InfoWindow对象,然后添加到MapView的Overlay中,如下所示:
InfoWindow infoWindow = new InfoWindow(R.layout.custom_infowindow, mapView);
CustomMarker marker = new CustomMarker(mapView, infoWindow);
marker.setPosition(new GeoPoint(0, 0));
mapView.getOverlays().add(marker);
这样就可以保证一个图标只有一个弹窗,并且刷新时不会新建弹窗,从而减少内存增加和泄漏的问题
原文地址: https://www.cveoy.top/t/topic/hHms 著作权归作者所有。请勿转载和采集!