gpt4 book ai didi

android - 如何管理点击不在 Android Google Map API 集群中的标记?

转载 作者:搜寻专家 更新时间:2023-11-01 09:23:57 24 4
gpt4 key购买 nike

我在为不在集群中的标记实现 OnClickListener 时遇到问题,即未添加使用:

 mClusterManager.addItem(markerCluster);

我已将 OnMarkerClickLister 设置如下:

 mMap.setOnCameraIdleListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);

如果我只是使用:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
});

点击标记根本不起作用。

例如:我有这种情况:

enter image description here

两个绿点和大蓝点(编号为 6)是一个簇,但红色标记不在簇中,因为我不希望它像其他标记一样成簇。当我单击红色标记时,InfoWindow 通常会显示,但 onMarkerClick 和 OnClusterItemClickListener 不起作用。但是,当我单击集群中的标记时,OnClusterItemClickListener 会起作用。

希望您了解我要实现的目标。如果没有,请告诉我。

最佳答案

更新的答案

您在编辑中添加的图片清楚地说明了问题,谢谢!

为了解决这个问题,我们需要以不同的方式注册监听器。即:通过将其注册到 ClusterManager 的 MarkerManager,因为该类现在处理所有标记。我们还需要以不同的方式添加 NormalMarkers,所以让我们一步一步来:

1) 更新mMapOnMarkerClickListener:

mMap.setOnMarkerClickListener(mClusterManager.getMarkerManager()); // Note the `MarkerManager` here

2) 此 MarkerManager 包含所有集合。我们需要在此管理器上创建一个新集合,我们将向其中添加应与集群分开显示的 NormalMarkers:

MarkerManager.Collection normalMarkersCollection = mClusterManager.getMarkerManager().newCollection();

3) 添加标记的方法与之前类似,但在我们创建的集合上使用 addMarker() 方法。我们必须将 MarkerOptions() 对象传递给它:

// Create a normal marker
val markerOptions = MarkerOptions()
.position(new LatLng(...))
.title("My marker")
.snippet("With description")

// Add it to the collection
normalMarkersCollection.addMarker(markerOptions)

4) 最后但同样重要的是:我们需要 OnClickListener :

normalMarkersCollection.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener {
public boolean onMarkerClick(marker: Marker) {
// NORMAL MARKER CLICKED!
return false;
}
})

5) 完成!现在,普通标记已像以前一样添加到 map 中,但使用了有效的 OnMarkerClickListener


较早的回答

(为集群和集群项设置点击监听器)

您应该将点击监听器添加到 mClusterManager。使用 ClusterManager 时,在 mMap 上设置点击监听器不起作用。

因此不使用mMap.setOnMarkerClickListener,而是在集群管理器上设置ClusterItemClickListener:

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() {
@Override
public boolean onClusterItemClick(MyItem item) {
Log.d("cluster item","clicked");
return true;
}
});

另外,如果要捕获集群项item的onclick,使用ClusterClickListener:

mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {
@Override
public boolean onClusterClick(Cluster<MyItem> cluster) {
Log.d("cluster","clicked");
return true;
}
});

关于android - 如何管理点击不在 Android Google Map API 集群中的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com