我在Android中使用谷歌地图,我想要聚类的800个标记和80个我不想聚集的标记。
对于我想要聚类的标记,我使用
添加到clusterManagermClusterManager.addItem(annotation);
对于我不想聚类的标记,我将它们直接添加到markerCollection
Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions());
此处annoation
是指AirMapMarker的一个实例,它是一个实现ClusterItem
的自定义类
annotation
包含自定义信息,例如当用户点击标记时我需要使用的标识字符串。
问题是,我无法为群集和mapMarker注册onClickListener。如果我这样做,只有map的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
触发。这是因为在向地图添加标记时,您提供了markersOptions而不是ClusterItem对象。
ClusterManager中有一个选项可以关闭群集,但这种选择是全局发生的,而不是特定的标记。
任何人都会帮助我或者给我一些关于我接下来应该尝试的建议吗?
答案 0 :(得分:0)
我不知道我是否理解你的问题。但这是一个可能的解决方案。
要群集的标记,可以将它们添加到ClusterManager中。
clusterManager.addItem(yourItem);
您不想要群集的群组,您可以将它们直接添加到您的GoogleMap对象中。
map.addMarker
在MarkerRenderer中,您可以覆盖
protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)
并根据需要将yourClusterItem映射到Marker。或者,您可以为标记设置标记,表明它是clusterItem。
public boolean onMarkerClick(Marker marker)
您可以检查您的标记(或您的地图),使其对每种标记都有不同的行为。