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