2016-01-26 43 views
1

我想以我的集群CustomMapMarker s到使用ClusterManager,但是当标记数据的变化和我打电话mClusterManager.cluster(),针位置不会改变。ClusterManager没有重绘标记

代码:

地图更新方法

void updateMap() { 
    mClusterManager.clearItems(); 
    mClusterManager.addItem(data.getMarker(id)); 
    mClusterManager.cluster(); 
} 

标记更新方法

CustomMarker processMarkerUpdate(JSONObject json) { 
    CustomMarker cm = new CustomMarker(json.optDouble("latitude", 0.0), json.optDouble("longitude",0.0)); 

    if (json.has("id")) { 
    cm.setUid(json.getString("id")); 
    } else { 
    //If this happens, we stop processing. 
    throw new InvalidCMException(); 
    } 

    cm.setLabel(json.optString("label", "")); 

    return cm; 
} 

我三重检查坐标和它们在物体变化,但标记不在地图上移动。

我错过了一个步骤吗?

+0

只是一个评论,不应该是mClusterManager.addItem()而不是add()? – natario

+0

@mvai你是对的,我修好了。 – nukeforum

回答

1

我已经重写我的Marker实现的hashCode()方法,这显然是造成散型集合平时替换的功能作用靠不住的。我的解决方案是删除我的自定义实现并解决它的需求。

0

我认为你应该在updateMap()中加GoogleMapclear()方法。它从地图上删除标记,多义线,多边形,叠加层等。

当您通过指定标记的选项将标记添加到GoogleMap时,应保存返回的标记对象。该对象允许您稍后更改标记状态。完成标记后,您可以拨打Marker.remove()将其从地图中删除。

也许这段代码有帮助。

void updateMap() { 
    mGoogleMap.clear(); 
    mClusterManager.clearItems(); 
    mClusterManager.addItem(data.getMarker(id)); 
    mClusterManager.cluster(); 
} 
+1

不幸的是,当我将'GoogleMap.clear()'添加到我的刷新方法中时,它会清除地图,并且不会再绘制任何东西。 – nukeforum

+0

清除googlemap工作给我。试试这个链接:http://stackoverflow.com/questions/8229827/update-markercluster-after-removing-markers-from-array –

+1

@ user5840004该解决方案是为JavaScript。这是一个关于Android的问题。 – nukeforum