Android Google 地图 Api 在放大时不会分簇

问题描述 投票:0回答:3

我创建了

Custom Cluster Render
扩展
DefaultClusterRenderer<T>
,同时使用
Google Maps Api
android maps utils
。根据以下指南 https://github.com/googlemaps/android-maps-utils/blob/master/demo/src/com/google/maps/android/utils/demo/CustomMarkerClusteringDemoActivity.java

当我在同一区域有太多

markers
时,它们就会聚集成一个。但是缩放时不会分离到
markers
,我可以看到

http://cs627121.vk.me/v627121202/51eb5/rY9f4p8ivos.jpg

这是一些代码:

 public PlaceRender(Context context, GoogleMap map, ClusterManager<MyCluster> clusterManager) {
    super(context, map, clusterManager);
    mIconGenerator = new IconGenerator(context);
    imageView = new ImageView(context);
    mClusterImageView = new ImageView(context);
    mIconGenerator.setContentView(imageView);
    this.context = context;
    this.map = map;
    this.myClusterManager = clusterManager;
}

@Override
protected void onBeforeClusterItemRendered(MyCluster cluster, MarkerOptions markerOptions) {
    super.onBeforeClusterItemRendered(cluster, markerOptions);
    markerOptions.title(cluster.name).snippet(cluster.snippet);
    markerOptions.infoWindowAnchor(0.5f, 0.0f);


}

@Override
protected void onBeforeClusterRendered(Cluster<MyCluster> cluster, MarkerOptions markerOptions) {
    super.onBeforeClusterRendered(cluster, markerOptions);
}

@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
    // Always render clusters.
    return cluster.getSize() > 1;
}

@Override
protected void onClusterRendered(Cluster<MyCluster> cluster, Marker marker){
    super.onClusterRendered(cluster, marker);
}


@Override
protected void onClusterItemRendered(MyCluster geo, Marker marker) {
    super.onClusterItemRendered(geo, marker);
    loadIconFromApi(geo, marker);
}


public void addItems(List<MyCluster> clusters, Context context, GoogleMap map) {
    myClusterManager = new ClusterManager<>(context, map);
    map.setOnMarkerClickListener(this);

    for (int i = 0; i < clusters.size(); i++) {
        myClusterManager.addItem(clusters.get(i));
        myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));

    }
    myClusterManager.cluster();

}

//
private void loadIconFromApi(MyCluster geo, Marker marker) {
    PicassoMarker markers = new PicassoMarker(marker, mIconGenerator, imageView);
    geo.setPicassoMarker(markers);
    Picasso.with(context).load(geo.image).into(markers);
}

@Override
public boolean onMarkerClick(Marker marker) {
    marker.showInfoWindow();
    return true;
}

如果我使用

15x camera zoom
,这样我就可以看到每个标记,然后
zoom out
它,我的标记将不会合并到一个
cluster

我错过了什么?

java android google-maps google-maps-api-2 markerclusterer
3个回答
2
投票

由于您设置的条件,您的

shouldRenderAsCluster()
始终处于聚类状态。

cluster.getSize() > 1;

您可以在这里

查看类似的SO帖子

另外,请尝试查看此SO帖子。发现您正在使用 PicassoMarker 库,这可能也会影响您的集群渲染。


0
投票

对于我来说,我没有使用地图对象设置CameraIdleListener。 设置 CameraIdleListener 和 MarkerClickListener 后放大时开始工作并显示各个引脚。 遵循这里的实现

myClusterManager = new ClusterManager<>(context, map);

// Point the map's listeners at the listeners implemented by the cluster
// manager.
map.setOnCameraIdleListener(myClusterManager);
map.setOnMarkerClickListener(myClusterManager);

-1
投票

我需要添加这个函数并在

onCameraChange

中调用它
public void updateUI(List<MyCluster> clusters) {
        myClusterManager.clearItems();

        for (int i = 0; i < clusters.size(); i++) {
            myClusterManager.addItem(clusters.get(i));
         //   myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));

    }
    myClusterManager.onCameraChange(map.getCameraPosition());
}
© www.soinside.com 2019 - 2024. All rights reserved.