ClusterManager Google maps v2 utils 的 ClusterItems 标记的多种样式
ClusterManager multiple styles for ClusterItems markers of Google maps v2 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()));
}
我已经弄明白了。用不同的图标聚类效果很好。首先,我必须向实现 ClusterItem 的 ClusterMarker class 添加一些字段。
public class ClusterMarker implements ClusterItem {
private final LatLng latLng;
private MyMarker myMarker;
...
public void setMyMarker(MyMarker myMarker) {
this.myMarker = myMarker;
}
}
MyMarker class 有一些关于样式标记、倾斜度和 ID 的信息。
在代码的后面,我只是通过这种方式向 ClusterManager 实例添加标记:
mClusterManager.addItem(clusterMarker);
在 OwnIconRendered class 中,我覆盖了 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);
}
}
我发现有一种方法可以更改 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()));
}
我已经弄明白了。用不同的图标聚类效果很好。首先,我必须向实现 ClusterItem 的 ClusterMarker class 添加一些字段。
public class ClusterMarker implements ClusterItem {
private final LatLng latLng;
private MyMarker myMarker;
...
public void setMyMarker(MyMarker myMarker) {
this.myMarker = myMarker;
}
}
MyMarker class 有一些关于样式标记、倾斜度和 ID 的信息。
在代码的后面,我只是通过这种方式向 ClusterManager 实例添加标记:
mClusterManager.addItem(clusterMarker);
在 OwnIconRendered class 中,我覆盖了 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);
}
}