ClusterManager多个样式用于Google Maps v2 utils的ClusterItems标记

时间:2016-09-08 15:14:21

标签: android android-maps-v2 marker markerclusterer android-maps-utils

我发现有一种方法可以更改ClusterItem渲染选项,以这种方式自定义它们:

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 个答案:

答案 0 :(得分:1)

我已经弄清楚了。使用不同图标进行聚类效果很好。首先,我必须在我的ClusterMarker类中添加一些字段来实现ClusterItem。

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类中,我覆盖了 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);
}
}