如何使用适用于Android的Android Maps Utility Library显示InfoWindow

nol*_*man 9 android google-maps markerclusterer

我正在使用Google Maps Android API Utility Library,以便以群集方式在地图中显示多个标记.我按照说明使其工作,以及查看库中的示例,但我无法弄清楚如何显示InfoWindow单击标记的时间.

我想getMap().setOnMarkerClickListener(mClusterManager);是管理onClick事件的人,如果注释掉了,我可以使用它来覆盖它,getMap().setInfoWindowAdapter(new InfoWindowAdapter() {));但我无法访问我的自定义标记对象.然而,如果我使用getMap().setOnMarkerClickListener(mClusterManager);,我找不到一种方法来显示InfoWindow点击标记的时间.

有没有人知道如何实现这一目标?

非常感谢提前!

rci*_*ati 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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用它:

ClusterManager<MyItem> clusterManager = new ClusterManager<MyItem>(this, getMap());
clusterManager.setRenderer(new MyClusterRenderer(this, getMap() ,clusterManager));
Run Code Online (Sandbox Code Playgroud)