我正在使用
Google Maps Android API Utility Library,以便以集群的方式在地图中显示几个标记.
我按照说明进行操作,以及查看库中的示例,但是当单击标记时,我无法弄清楚如何显示InfoWindow.
我按照说明进行操作,以及查看库中的示例,但是当单击标记时,我无法弄清楚如何显示InfoWindow.
我猜getMap().setOnMarkerClickListener(mClusterManager);是管理onClick事件的一个,如果注释掉,我可以使用getMap()来覆盖它.setInfoWindowAdapter(new InfoWindowAdapter(){));但我无法访问我的自定义标记对象.
然而,如果我使用getMap().setOnMarkerClickListener(mClusterManager);我没有找到一个方法来显示InfoWindow当一个标记被点击.
有没有人知道如何实现这一点?
非常感谢!
解决方法@H_404_12@
您需要扩展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));
之后,您可以将您的实现传递给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));