ClusterManager onMarkerClickListener 用于非聚集标记
Posted
技术标签:
【中文标题】ClusterManager onMarkerClickListener 用于非聚集标记【英文标题】:ClusterManager onMarkerClickListener for non-clustered markers 【发布时间】:2017-10-04 14:04:00 【问题描述】:我在 android 中使用 Google 地图,其中包含大约 800 个我想要聚类的标记和 80 个我不想聚类的标记。
对于我想要集群的标记,我使用添加到 clusterManager 中
mClusterManager.addItem(annotation);
对于我不想聚类的标记,我直接将它们添加到 markerCollection
Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions());
这里annoation
指的是AirMapMarker的一个实例,它是一个实现ClusterItem
的自定义类
annotation
包含一个自定义信息,例如当用户点击标记时我需要使用的标识字符串。
问题是,我无法同时为集群和 mapMarker 注册 onClickListener。如果我这样做了,只会触发地图的 onMarkerClickListener。
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
public boolean onMarkerClick(Marker marker)
// Handle marker click fires correctly.
mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<AirMapMarker>()
public boolean onClusterItemClick(AirMapMarker marker)
// Doesn't Fire
现在的问题是,在 onMarkerClick 内部,我需要访问作为 AirMapMarker 一部分的标识,以防标记单击发生在单个非聚集标记上。我想不出将Marker
映射到AirMapMarker
内部onMarkerClick
的方法。
我还尝试完全删除 map.setOnMarkerClickListener
并仅依赖 mClusterManager.setOnClusterItemClickListener
。然而,现在的问题是,当标记点击发生在不属于集群的标记上时,onClusterItemClick
会使用参数null
触发。这是因为在向地图添加标记时,您提供的是 markerOptions 而不是 ClusterItem 对象。
ClusterManager 中有一个选项可以关闭集群,但这会在全局范围内发生,而不是针对特定标记。
有人帮助我或给我建议我下一步应该尝试什么?
【问题讨论】:
【参考方案1】:我不知道我是否正确理解了你的问题。但这里有一个可能的解决方案。
你想要集群的标记,你可以将它们添加到ClusterManager。
clusterManager.addItem(yourItem);
您不想集群的那些,您可以将它们直接添加到您的 GoogleMap 对象中。
map.addMarker
在您的 MarkerRenderer 中,您可以覆盖
protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)
如果需要,将 yourClusterItem 映射到您的标记。或者你可以为你的标记设置一个标签,表明它是一个 clusterItem。
在public boolean onMarkerClick(Marker marker)
您可以检查您的标签(或您的地图),以使每种标记具有不同的行为。
【讨论】:
以上是关于ClusterManager onMarkerClickListener 用于非聚集标记的主要内容,如果未能解决你的问题,请参考以下文章
使用 ClusterManager 时如何更新 Map 上的标记
ClusterManager onMarkerClickListener 用于非聚集标记
ClusterManager 重绘 Google maps v2 utils 的标记