【问题标题】:ClusterManager multiple styles for ClusterItems markers of Google maps v2 utils谷歌地图 v2 实用程序的 ClusterItems 标记的 ClusterManager 多种样式
【发布时间】:2017-01-16 14:29:04
【问题描述】:

我发现有一种方法可以更改 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()));
}

【问题讨论】:

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


    【解决方案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 类中,我覆盖了所有标记样式发生的 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);
    }
    }
    

    【讨论】:

    • 完美解决方案
    猜你喜欢
    • 2017-08-06
    • 2012-12-07
    • 2014-07-20
    • 1970-01-01
    • 2014-05-01
    • 2014-11-08
    • 2017-03-29
    • 2015-06-03
    • 2014-08-13
    相关资源
    最近更新 更多