如何显示信息窗口使用Android地图实用程序库为Android实用程序、窗口、地图、信息

2023-09-04 11:43:57 作者:许我安

我使用谷歌地图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));