Android群集和标记点击

tio*_*oit 12 android google-maps android-maps-utils

我使用的是地图上的机器人聚集效用和succesffuly实现与mClusterManager.setOnClusterItemClickListener()一个onclick侦听由聚类库处理的所有标记.

因为我还想要一些标记总是非聚集的,我也添加一些标记而不使用mClusterManager但是直接使用地图的mMap.addMarker(),这样我确信它们永远不会聚集在地图上.

我的问题是我无法拦截那些标记上的点击(总是非集群的标记),因为我已经使用了mMap.setOnMarkerClickListener(mClusterManager)来处理点击的集群标记.

有没有办法收听点击的聚类标记和聚类库未处理的点击标记?

或者有没有办法指定集群管理器永远不会聚集一些标记?在这种情况下,我不必处理那些不同的点击侦听器,因为所有标记都将使用群集实用程序显示.

谢谢

Nas*_*eek 17

您可以创建一个MarkerManager传递给ClusterManager构造函数的新元素.然后MarkerManager#newCollection使用该MarkerManager.Collection#addMarker方法创建一个新的Marker集合并将正常的Markers添加到地图中.

然后,而不是呼叫mMap.setOnMarkerClickListener(mClusterManager),呼叫mMap.setOnMarkerClickListener(mMarkerManager),它将处理将您的Marker点击事件转发给适当的听众.您还需要使用该MarkerManager.Collection#setOnMarkerClickListener(GoogleMap.OnMarkerClickListener markerClickListener)函数为正常标记设置onMarkerClick侦听器.

我建议查看MarkerManager和ClusterManager类的源代码,以便更好地了解类的交互方式.

  • thx,完善它的工作.阅读你给的MarkerManager链接真的对我很有帮助,这是一个很好的建议. (3认同)

Atu*_*lic 8

接收点击事件的另一种方法Marker是使用OnClusterItemClickListener界面.

打电话给mClusterManager.setOnClusterItemClickListener(this);你的班级实施OnClusterItemClickListener

然后在onClusterItemClick方法内部,您将获得ClusterItem,它是被单击的标记,

@Override
public boolean onClusterItemClick(ClusterItem clusterItem) {

    Toast.makeText(getActivity(), "Latitude " + clusterItem.getPosition().latitude, Toast.LENGTH_LONG).show();

    return true;
}
Run Code Online (Sandbox Code Playgroud)