Android上使用聚合标记的Google地图自定义标记图标

9
我已经实现了Google 地图聚合的代码。
这是我活动中的代码。
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参数更改标记图标。 我该怎么做?
3个回答

5

考虑重写 onBeforeClusterRendered。以下代码可以使用:

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

请注意,这只是示例代码。在实际使用中,您需要手动将文本添加到位图,并添加一些缓存机制。您可以查看DefaultClusterRenderer的源代码进行参考。


FYI:这两个链接现在都失效了。 - rekire
如果有人在寻找链接,我已经提交了一个编辑答案,并且可以在以下链接中找到:https://github.com/googlemaps/android-maps-utils/blob/master/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java - ravi

3

您需要在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 类? - softmarshmallow

0
Neelesh的回答对我有用。记得将那个渲染器链接到你的集群上。
private ClusterManager<AntenaModel> clusterManager;

clusterManager = new ClusterManager<>(ctx, mMap);
clusterManager.setRenderer(new CustomMapClusterRenderer<>(ctx, mMap, clusterManager));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接