Android:Google地图中的复选框标记和取消标记

时间:2014-01-30 11:03:22

标签: android google-maps checkbox google-maps-markers

是否有可能删除某些Google地图标记并且必须执行map.clear()?因为在我的应用程序中,我有几个复选框标记并且没有标记一些标记...

我怎样才能做到这一点?

2 个答案:

答案 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)。并且当然要适应你自己的情况。