我使用谷歌地图Android的API工具库,以显示在地图中的几个标记集群的方式。
我一直跟着,使其工作,并采取一看在图书馆的例子说明,但我不能想出如何显示出信息窗口
时,一个点击标记。
I'm using Google Maps Android API Utility Library in order to show several markers in a map in a clustered way.
I've followed the instructions to make it work, as well as taking a look at the examples in the library, but I can't figure out how to show an InfoWindow
when a marker is clicked.
我觉得的GetMap()setOnMarkerClickListener(mClusterManager);
是一个管理的onClick
活动,如果注释掉,我可以使用的GetMap()重写它setInfoWindowAdapter(新InfoWindowAdapter(){));
,但我有我的自定义标记对象的访问权限。
不过,如果我使用的GetMap()setOnMarkerClickListener(mClusterManager);
,我不能找到一种方式来展现信息窗口
当标记已被点击了。
I guess getMap().setOnMarkerClickListener(mClusterManager);
is the one managing the onClick
events, and if commented out, I can override it using getMap().setInfoWindowAdapter(new InfoWindowAdapter() {));
but I have no access to my custom marker object.
Nevertheless, if I use getMap().setOnMarkerClickListener(mClusterManager);
, I can't find a way to show the InfoWindow
when a marker has been clicked.
有没有人对如何实现这一目标的任何想法?
Does anybody have any idea about how to achieve this?
感谢很多提前!
您需要延长 DefaultClusterRenderer
类和重写 onBeforeClusterItemRendered
,附加标题到MarkerOptions对象作为参数传递。
You need to extend the DefaultClusterRenderer
class and override the onBeforeClusterItemRendered
, attaching the title to the MarkerOptions object passed as argument.
在这之后,你可以通过你的执行情况向 ClusterManager
。
After that, you can pass your implementation to the 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
}
}
然后就可以这样使用它:
And then you can use it in this way:
ClusterManager<MyItem> clusterManager = new ClusterManager<MyItem>(this, getMap());
clusterManager.setRenderer(new MyClusterRenderer(this, clusterManager));