从GoogleMap中移除一个标记

在新的Android版Google Maps API中,我们可以添加一个标记 ,但无法(轻松)删除标记 。

我的解决scheme是将标记保留在地图中,当我想删除标记时重绘地图,但效率不高。

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>(); private void add(String name, LatLng ll) { final MarkerOptions marker = new MarkerOptions().position(ll).title(name); mMarkers.put(name, marker); runOnUiThread(new Runnable() { @Override public void run() { mMap.addMarker(marker); } }); } private void remove(String name) { mMarkers.remove(name); runOnUiThread(new Runnable() { @Override public void run() { mMap.clear(); for (MarkerOptions item : mMarkers.values()) { mMap.addMarker(item); } } }); } 

有没有人有更好的主意?

addMarker的方法签名是:

 public final Marker addMarker (MarkerOptions options) 

因此,当您通过指定标记的选项将标记添加到GoogleMap ,应保存返回的Marker对象(而不是您用来创build它的MarkerOptions对象)。 这个对象允许你稍后改变标记状态。 当您完成标记时,可以调用Marker.remove()将其从地图中删除。

另外,如果您只想临时隐藏它,可以通过调用Marker.setVisible(boolean)来切换标记的可见性。

清除地图使用中的所有涂鸦

 map.clear() 

像这样将标记添加到地图

 Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title")); 

然后你就可以使用remove方法,它只会删除那个标记

 markerName.remove(); 

1.如果你想删除一个标记,你可以做marker.remove(); 或者,您也可以隐藏标记,而不是将其删除

  marker.setVisible(false); 

并在需要时稍后显示。
2.然而,如果你想从地图上删除所有的标记使用 map.clear();
注意: map.clear(); 也将删除Polylines, Circles
3.如果你不想删除Polylines, Circles使用循环标记的长度(如果你有多个标记)删除那些在这里检查示例 设置它们可见false并且不要使用map.clear(); 在这种情况下。

如果标记存在删除最后一个标记 如果标记不存在,则创build当前标记

 Marker currentMarker = null; if (currentMarker!=null) { currentMarker.remove(); currentMarker=null; } if (currentMarker==null) { currentMarker = mMap.addMarker(new MarkerOptions().position(arg0). icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); } 

使用下面的代码:

  mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { marker.remove(); return true; } }); 

一旦你点击“标记” ,你可以删除它。

创build一个全局variables来跟踪标记

 private Marker currentLocationMarker; 

//删除旧标记

  if (null != currentLocationMarker) { currentLocationMarker.remove(); } 

//添加更新的标记并移动相机

  currentLocationMarker = mMap.addMarker(new MarkerOptions().position( new LatLng(getLatitude(), getLongitude())) .title("You are now Here").visible(true) .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front)) .snippet("Updated Location")); currentLocationMarker.showInfoWindow(); 

在地图上添加所有标记的数组。

稍后,使用:

 Marker temp = markers.get(markers.size() - 1); temp.remove();