我正在使用Google Maps Android API Utility Library以便以群集方式在地图中显示多个标记。
我已按照说明进行操作,并查看了库中的示例,但我无法弄清楚如何在单击标记时显示InfoWindow
。
我猜getMap().setOnMarkerClickListener(mClusterManager);
是管理onClick
事件的人,如果已注释掉,我可以使用getMap().setInfoWindowAdapter(new InfoWindowAdapter() {));
覆盖它,但我无法访问自定义标记对象。
不过,如果我使用getMap().setOnMarkerClickListener(mClusterManager);
,我找不到在点击标记时显示InfoWindow
的方法。
有没有人知道如何实现这个目标?
提前多多感谢!
答案 0 :(得分:23)
您需要扩展DefaultClusterRenderer
类并覆盖onBeforeClusterItemRendered
,将标题附加到作为参数传递的MarkerOptions对象。
之后,您可以将实施传递给ClusterManager
。
示例:
class MyItem implements ClusterItem {
private LatLng mPosition;
private String mTitle;
public MyItem(LatLng position){
mPosition = position;
}
@Override
public LatLng getPosition() {
return mPosition;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
}
class MyClusterRenderer extends DefaultClusterRenderer<MyItem> {
public MyClusterRenderer(Context context, GoogleMap map,
ClusterManager<MyItem> clusterManager) {
super(context, map, clusterManager);
}
@Override
protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {
super.onBeforeClusterItemRendered(item, markerOptions);
markerOptions.title(item.getTitle());
}
@Override
protected void onClusterItemRendered(MyItem clusterItem, Marker marker) {
super.onClusterItemRendered(clusterItem, marker);
//here you have access to the marker itself
}
}
然后你可以这样使用它:
ClusterManager<MyItem> clusterManager = new ClusterManager<MyItem>(this, getMap());
clusterManager.setRenderer(new MyClusterRenderer(this, getMap() ,clusterManager));