【问题标题】:Google maps custom marker icon with clustering on Android谷歌在 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 参数更改标记图标。

我该怎么做?

【问题讨论】:

    标签: android google-maps google-maps-markers android-maps-utils


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案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 类?
    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多