谷歌在 Android 上使用集群映射自定义标记图标

Posted

技术标签:

【中文标题】谷歌在 Android 上使用集群映射自定义标记图标【英文标题】:Google maps custom marker icon with clustering on Android 【发布时间】:2016-11-21 06:06:48 【问题描述】:

我已经实现了Google Maps Clustering的代码

这是我活动中的代码

private void setUpClusterer() 
    mClusterManager = new ClusterManager<StoreItem>(this, mMap);
    mMap.setOnCameraChangeListener(mClusterManager);
    mMap.setOnMarkerClickListener(mClusterManager);


public void addItems(List<Store> stores) 
    for (Store store : stores) 
        mClusterManager.addItem(new StoreItem(store.getImage(), store.getLocation().getLatitude(), store.getLocation().getLongitude()));
    


private void removeAllItems() 
    mClusterManager.clearItems();

这是 StoreItem 类

public class StoreItem implements ClusterItem 

    private String url;
    private final LatLng mPosition;

    public StoreItem(String url, double lat, double lng) 
        this.url = url;
        mPosition = new LatLng(lat, lng);
    

    @Override
    public LatLng getPosition() 
        return mPosition;
    

    public String getUrl() 
        return url;
    

    public void setUrl(String url) 
        this.url = url;
    

现在,我想通过 StoreItem 类中的 url 参数更改标记图标。

我该怎么做?

【问题讨论】:

【参考方案1】:

考虑覆盖onBeforeClusterRendered。类似的东西会起作用:

BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(here_goes_your_bitmap);
markerOptions.icon(descriptor);

请记住,代码仅用于示例。您必须手动将文本添加到位图并添加一些缓存机制以供实际使用。示例可以看DefaultClusterRenderer的源代码。

【讨论】:

仅供参考:两个链接现在都已失效 如果有人在寻找链接,我已经提交并编辑了答案,它可以在:github.com/googlemaps/android-maps-utils/blob/master/library/…【参考方案2】:

你需要 @override 方法 onBeforeClusterItemRendered() 的 DefaultClusterRenderer 类 将 onBeforeClusterItemRendered 中的 iconurl 设置为 markerOptions 请查看以下代码:

private class CustomMapClusterRenderer<T extends ClusterItem> extends DefaultClusterRenderer<T> 
        CustomMapClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) 
            super(context, map, clusterManager);
        

        @Override
        protected boolean shouldRenderAsCluster(Cluster<T> cluster) 
            //start clustering if 2 or more items overlap
            return cluster.getSize() >= Constants.MINIMUM_CLUSTER_SIZE;
        

        @Override
        protected void onBeforeClusterItemRendered(T item,
                                                   MarkerOptions markerOptions) 
            ClusterMarkerItem markerItem = (ClusterMarkerItem) item;
            markerOptions.icon(BitmapDescriptorFactory.fromPath(markerItem.getURL()));
        
    

【讨论】:

我应该在哪里使用这个CustomMapClusterRenderer 类?

以上是关于谷歌在 Android 上使用集群映射自定义标记图标的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图上的自定义标记如下图

带有毕加索的谷歌地图集群项目标记图标

Android:集群标记计数未使用自定义标记正确显示

在谷歌地图自定义标记未显示在三星 S8 或 Android 的相同版本 7.0

带有集群和自定义视图标记的谷歌地图在放大和缩小时滞后太多

用于 clusterItems 的 Android 谷歌地图 markerClickListener