Android 如何临时禁用地图标记群集?

Android 如何临时禁用地图标记群集?,android,android-maps-v2,android-maps-utils,Android,Android Maps V2,Android Maps Utils,我正在使用Google Maps V2 for Android和Maps utils扩展库进行标记聚类。应用程序的某些部分不需要获取群集标记 是否有任何方法禁止clusterManager对标记进行群集,并在特定条件下允许它再次对项目进行群集?群集管理器实现只能执行内置群集功能。如果希望某些标记不聚集,则需要直接将这些标记添加到地图中。当您决定对这些标记进行群集时,需要将它们从地图中删除,并将它们的信息传输到群集管理器,以便它接管。我找到了另一种解决方案。我发现,在DefaultClusterR

我正在使用Google Maps V2 for Android和Maps utils扩展库进行标记聚类。应用程序的某些部分不需要获取群集标记


是否有任何方法禁止clusterManager对标记进行群集,并在特定条件下允许它再次对项目进行群集?

群集管理器实现只能执行内置群集功能。如果希望某些标记不聚集,则需要直接将这些标记添加到地图中。当您决定对这些标记进行群集时,需要将它们从地图中删除,并将它们的信息传输到群集管理器,以便它接管。

我找到了另一种解决方案。我发现,在
DefaultClusterRenderer
方法
shouldrrenderascluster
上,标记是否将被渲染为集群是有责任的。因此,我创建了一个CustomRenderer类,它扩展了
DefaultClusterRenderer
,并创建了一个带有布尔变量的方法来确定渲染器是否应该集群

public class CustomRenderer extends DefaultClusterRenderer<MarkerItem>
{
private boolean shouldCluster = true;
private static final int MIN_CLUSTER_SIZE = 1;

//Some code....

public void setMarkersToCluster(boolean toCluster)
{
    this.shouldCluster = toCluster;
}
公共类CustomRenderer扩展了DefaultClusterRenderer
{
私有布尔值shouldCluster=true;
私有静态final int MIN_CLUSTER_SIZE=1;
//一些代码。。。。
public void setMarkersToCluster(布尔toCluster)
{
this.shouldCluster=toCluster;
}
我还重写了前面提到的方法

@Override
protected boolean shouldRenderAsCluster(Cluster<MarkerItem> cluster)
{
    if (shouldCluster)
    {
        return cluster.getSize() > MIN_CLUSTER_SIZE;
    }

    else
    {
        return shouldCluster;
    }
}
@覆盖
受保护的布尔值shouldRenderAsCluster(群集)
{
if(shouldldcluster)
{
返回cluster.getSize()>MIN\u cluster\u SIZE;
}
其他的
{
返回应该集群;
}
}
现在如果我想停止集群,我只需要从我想要的活动调用这个方法

ClusterManager clusterManager = new ClusterManager<MarkerItem>(this, googleMap);
CustomRenderer customRenderer = new CustomRenderer(this, googleMap, clusterManager);
clusterManager.setRenderer(customRenderer);
customRenderer.setMarkersToCluster(false);
ClusterManager ClusterManager=newclustermanager(这是谷歌地图);
CustomRenderer CustomRenderer=新的CustomRenderer(这个、谷歌地图、clusterManager);
setRenderer(customRenderer);
customRenderer.setMarkersToCluster(false);

如果我直接将这些特定的标记添加到地图中,我无法在标记单击时显示信息窗口,因为群集管理器从一开始就处理标记单击。您可以在任何地方处理单击。对于我的用例,我编写了一个地图管理器,帮助总结与您所追求的功能类似的功能。基本上,我的管理器处理所有标记er单击,无论它们是来自群集管理器还是直接来自映射。我将使用类似的方法帮助您完成所有需要的功能。TLDR,我还创建了一种方法,可以将标记映射回正确的数据,如果您已经在处理群集单击,听起来您已经遇到了问题处理集群点击充其量是令人恼火的。是的,这对我来说是完美的,但是我目前没有弄清楚如何捕获clustermanager标记点击和直接映射点击,因为你必须为每一个点击指向不同的侦听器。有什么建议你是如何实现这种方法的吗?在这个实现中,我结束了通过使用意图来播放广播,所以点击可以在任何上下文中处理,但这不是处理点击的要求。本质上,我的渲染器保留了一个数据映射来根据所选标记进行数据查找。如果您考虑这个系统,您在地图上的标记点击可以实现与您的渲染器和YO类似的系统。您可以使用意图的中心处理程序(或任何您的实现)不管源代码是什么,通常都要处理点击。但这不是一个绝对的解决方案,只是一个有效的解决方案。需要此解决方案,但链接已断开:/如果您只想在调用群集管理器自己的
onCameraChan之前,在地图的
onCamerachane
中群集到某个缩放级别,这是非常有用的方法ge
,您可以检查当前的缩放级别并适当设置
shouldCluster
。事实上,我实际上也在使用这种方法