2016-01-26 90 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