我创建一个Android应用程序,我需要在地图上设置标记。而且,由于我的应用程序需要离线功能,我需要使用Osmdroid来解决这个问题。现在我的问题是地图,我可以很容易地通过使用标记或ItemizedOverlay添加它们的标记,但我遇到的问题是,我不能从地图上删除标记。
我已经使用了添加标记的代码是这一个:
Marker marker = new Marker(mapView);
marker.setPosition(new GeoPoint(41.3746312,19.7710733));
marker.setIcon(getResources().getDrawable(R.drawable.marker));
marker.setImage(getResources().getDrawable(R.drawable.marker));
marker.setTitle("Marker");
marker.setInfoWindow(null);
marker.showInfoWindow();
mapView.getOverlays().add(marker);
mapView.invalidate();
但我对因为删除它是唯一的办法消除他们遇到的问题:
mapView.getOverlays().clear();
我需要在同一时间删除特定的标记,而不是全部。
对于删除特定的标记,你应该使用:
mapView.getOverlays().remove(overlay);
mapView.invalidate();
有添加和删除项目的另一种方式。
首先,你需要这个片断:
ArrayList<OverlayItem> items = items = new ArrayList<OverlayItem>();
ItemizedOverlayWithFocus<OverlayItem> mOverlay = mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int position, final OverlayItem item) {
//do something
return true;
}
@Override
public boolean onItemLongPress(final int position, final OverlayItem item) {
return false;
}
}, getApplicationContext());
mOverlay.setFocusItemsOnTap(true);
应用程序在启动前添加项目,使用此代码:
mOverlay.addItem(new OverlayItem("Title", "Description", new
GeoPoint(31.7359474,55.4384632)));
map.getOverlays().add(mOverlay);
在运行应用程序,你可以增加更多项目与下面的代码:
mOverlay.addItem(new OverlayItem("new Title", "new Description", new GeoPoint(Latitude,Longitude)));
去除而应用程序与下面的代码运行的项目:
mOverlay.removeItem(int position);
该position
是您添加到list.you可以把删除代码到我们在这个答案中使用了onItemSingleTapUp
that第n个项目,这意味着当你在项目挖掘它会从屏幕上删除。