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

时间:2014-02-19 09:52:55

标签: android google-maps markerclusterer

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

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

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

提前多多感谢!

1 个答案:

答案 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));