我的应用程序搜索和可视化相同的叠加层。但是,在下一次搜索中,旧的叠加层不清楚。我必须尝试使用map.getOverlays().clear();
,但它也会移除MyLocationOverlay
的叠加层。有一种只删除相同叠加层的方法吗?
答案 0 :(得分:2)
我知道它有点太晚了,但是因为我提出了一个帮助我的解决方案,我想分享它以便将来帮助程序员..
@ hooked82:只做
的问题overlays.remove(position)
是它的清单。因此,当您从列表中删除一个项目时,列表中此项目右侧的每个项目都会向左移动一个位置,这最终会使您的位置陷入困境,因此无法全面跟踪它们时间。
在我的一个项目中,我遇到了同样的问题。由于我在某些更新时添加和删除叠加层,经过一段时间后,很难跟踪列表中的叠加位置。
以下是我为解决问题所做的工作,到目前为止还没有问题。
第1步:创建自定义叠加层
public class MyOverlay extends Overlay
{
private String overlayUUID;
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
-- do what you need to do here --
}
public String getOverlayUUID()
{
return overlayUUID
}
}
在您处理叠加层的MapClass中的第2步:。请确保mapOverlays列表是MapView类中的全局列表,您可以在其中添加所有mapOverlays
List<Overlay> mapOverlays = mapView.getOverlays();
public void removeChosenOverlay(String overlayUUID)
{
for(int i=0; i<mapOverlays.size(); i++)
{
String className = mapOverlays.get(i).getClass().getSimpleName();
if(className.equals("MyOverlay"))
{
MyOverlay myOverlay = (MyOverlay) mapOverlays.get(i);
if((myOverlay != null) && (myOverlay.getOverlayUUID.equals(overlayUUID)))
{
mapOverlays.remove(i);
mapView.invalidate()
break;
}
}
}
}
使用上述方法,可以使用UUID唯一标识每个叠加层(在我的情况下,它是一个字符串,但您可以自定义创建您希望的任何格式的UUID)并从列表中成功删除相应的叠加项覆盖,不必担心他们在列表中的相对位置。
我希望通过唯一识别叠加层帮助其他人面对同样的问题。
答案 1 :(得分:1)
向地图添加叠加层时,可以将其添加到某个位置
overlays.add(position, overlay_object);
然后,当您需要删除特定叠加层时,可以以相同的方式删除它们
overlays.remove(position);
答案 2 :(得分:1)
你可以借助计数器和另一个对overlayItem的引用来保存你要删除的旧叠加层 在我的情况下,counter是current_overlay_counter,old_overlay_item获取旧覆盖的参考 在第一次调用时,计数器为0,因此没有要移除的叠加
public void getcurrentPostion()
{
GeoPoint gpoint=new GeoPoint((int)((current_location.getLatitude())*1E6),( (int)((current_location.getLongitude())*1E6)));
OverlayItem overlayitem = new OverlayItem(gpoint, "Hola, Mundo!", "I'm in Mexico City!");
mapOverlays = map.getOverlays();
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
if(current_overlay_counter>0)
{
System.out.println("deleting overlay");
itemizedoverlay.removeOverlay(old_overlay_item);
map.invalidate();
}
old_overlay_item=overlayitem;
current_overlay_counter++;
map_controller.setCenter(gpoint);
}
您还需要一件事,一种在ItemizedOverlay类实现中删除叠加层的方法
此方法采用您要删除的叠加层的引用
public void removeOverlay(OverlayItem overlay){
mOverlays.remove(overlay);
System.out.println("removeOverlay is called");
populate();
}