是否有可能删除某些Google地图标记并且必须执行map.clear()?因为在我的应用程序中,我有几个复选框标记并且没有标记一些标记...
我怎样才能做到这一点?
答案 0 :(得分:0)
在setVisible(true)
对象(而非Marker
上使用MarkerOptions
,这很重要。将所需的所有标记添加为可见/不可见,保留对Marker
个对象的引用,并根据需要切换它们。
答案 1 :(得分:0)
我过去做过类似的事情。
诀窍是维护Marker
对象的列表,但是在你自己的自定义类中(我创建了一个名为MapPoint
的类,它有latlng,title,icon,snippet并且拥有一个Marker
)。
然后,当您要将更新推送到地图时,您将使用当前活动MapPoint
对象列表创建Marker
个对象(MapPoint
设置为null)的列表,删除不再存在的重复项和空项。这使您可以尽可能少地更新地图,而不是对所有内容进行全面刷新。
包含评论的代码段,以便于阅读:
// holds the current list of MapPoint objects
public ArrayList<MapPoint> mCurrentPoints = new ArrayList<MapPoint>();
public void addMapPoints(ArrayList<MapPoint> mapPoints) {
// only process if we have an valid list
if (mapPoints.size() > 0) {
// iterate backwards as we may need to remove entries
for (int i = mCurrentPoints.size() - 1; i >= 0; i--) {
// get the MapPoint at this position
final MapPoint point = mCurrentPoints.get(i);
// check if this point exists in the new list
if (!mapPoints.contains(point)) {
// if it doesn't exist and has a marker (null check), remove
if (point.mMarker != null) {
// removes Marker from mMap
point.mMarker.remove();
}
// remove our MapPoint from the current list
mCurrentPoints.remove(i);
} else {
// already exists, remove from the new list
mapPoints.remove(point);
}
}
// add all the remaining new points to the current list
mCurrentPoints.addAll(mapPoints);
// go through every current point. If no mMarker, create one
for (MapPoint mapPoint : mCurrentPoints) {
if (mapPoint.mMarker == null) {
// create Marker object via mMap, save it to mapPoint
mapPoint.mMarker = mMap.addMarker(new MarkerOptions()
.position(mapPoint.getLatLng())
.title(mapPoint.getTitle())
.icon(mapPoint.getMarker())
.snippet(mapPoint.getInfoSnippetText()));
}
}
}
}
因此,您需要一个方法来确定要显示的Marker
个对象,为它们创建MapPoint
个对象,然后将它们的列表发送到此addMapPoints()
方法。
一些好主意:synchronize
列表上的mCurrentPoints
(已移除以简化代码段)并确保在UI线程上运行以添加/删除标记。 (最好从主线程执行此处理,然后跳转到它以实际添加/删除Markers
)。并且当然要适应你自己的情况。