1

我发现有改变ClusterItem渲染选项的方式,定制他们这样说:ClusterManager多种款式供谷歌地图V2 utils的的ClusterItems标记

clusterManager.setRenderer(new OwnIconRendered(getApplicationContext(), getMap(), clusterManager)); 

OwnIconRendered应该扩展DefaultClusterRenderer。

但是,它改变了一种风格的所有标记。对于不同的ClusterItems,我需要不同的样式选项。 我试过手动在clusterManager集合中添加标记,但是然后集群不起作用。

MarkerManager.Collection markerCollection = mClusterManager.getMarkerCollection(); 
for(MyMarker marker: markerList){ 
markerCollection.addMarker(getMarkerOptions(latLng, marker.getLabel(), marker.getType())); 
} 

回答

1

我已经想通了。用不同的图标进行聚类很有效。首先,我必须将一些字段添加到实现ClusterItem的ClusterMarker类中。

public class ClusterMarker implements ClusterItem { 
private final LatLng latLng; 
private MyMarker myMarker; 

... 
public void setMyMarker(MyMarker myMarker) { 
    this.myMarker = myMarker; 
} 
} 

MyMarker类有一些样式标记,倾斜和id的信息。

在代码中,我只需添加标记到ClusterManager实例这种方式后来:

mClusterManager.addItem(clusterMarker); 

在OwnIconRendered I类overrided onBeforeClusterItemRendered方法,其中所有标记的造型发生在onClusterItemRendered方法我加标签标记,所以稍后我可以在点击事件上识别地图上的标记。

public class OwnIconRendered extends DefaultClusterRenderer<ClusterMarker> { 
... 
cunstructor 
... 

@Override 
protected void onBeforeClusterItemRendered(ClusterMarker item, MarkerOptions markerOptions) { 

    MyMarker myMarker = item.getMyMarker(); 

    markerOptions.icon(myMarker.getIcon()); 
    markerOptions.title(myMarker.getLabel()); 
    markerOptions.anchor(0.5f, 1); 
    super.onBeforeClusterItemRendered(item, markerOptions); 
} 

@Override 
protected void onClusterItemRendered(ClusterMarker clusterMarker, Marker marker) { 
    marker.setTag(clusterMarker.getPlaceMarker().getItemId()); 
    super.onClusterItemRendered(clusterMarker, marker); 
    clusterMarkerMap.put(marker, clusterMarker); 
} 
} 
+0

完美的解决方案 –