0

我需要在地图上显示 >100 个标记并在单击标记后显示信息窗口。我使用了 android google maps api v2,但它落后于这么多的标记。所以我决定切换到 android-maps-extensions。在我这样做之后,单击标记后信息窗口停止出现。

这是我的代码:

private void prepareMap() {
    SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.locationsMap);
    map = fragment.getExtendedMap();

    ClusteringSettings settings = new ClusteringSettings();
    settings.clusterOptionsProvider(new ClusterOptionsProvider() {
        @Override
        public ClusterOptions getClusterOptions(List<Marker> markers) {
            float hue = BitmapDescriptorFactory.HUE_RED;
            BitmapDescriptor icon = BitmapDescriptorFactory.defaultMarker(hue);
            return new ClusterOptions().icon(icon);
        }
    });
    settings.clusterSize(100);
    settings.addMarkersDynamically(true);
    map.setClustering(settings);

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            // breakpoint here are working. marker is not null
            marker.showInfoWindow();
            return false;
        }
    });
}

public void onLoadFinished(android.support.v4.content.Loader loader, Cursor cursor) {
    if (map != null) {
        cursor.moveToFirst();
        int count = cursor.getCount();
        for (int i = 0; i < count; i++) {

            Location location = new Location(cursor);

            MarkerOptions options = new MarkerOptions();
            options.position( new LatLng(location.getLatitude(), location.getLongitude()));
            options.title(location.getTitle()); // title is not null
            options.snippet(location.getAddress()); // address is not null
            options.data(location);
            map.addMarker(options);
            cursor.moveToNext();
        }
    }
}

有什么建议么?我尝试使用自己的 InfoWindowAdapter,但它没有缩放此窗口以获取适当的内容,但是我在 xml 中使用 wrap_content 属性。

4

1 回答 1

0

由于(尚)不支持设置标题ClusterOptions,您将不得不使用InfoWindowAdapter(您可能会提出一个单独的问题,说明它为什么不能按您想要的方式工作)或添加title到您ClusterOptions自己并确保将其值转发给virtual标记代表集群。这听起来很复杂,但相当容易。您可能还想在 GitHub 上添加有关集群不支持标题的问题。
之后,您可以使用类似的东西:

return new ClusterOptions().icon(icon).title("Test");

然后,您将必须找出最适合您需求的标题。您很可能希望使用List<Marker>来计算这组标记的标题。

注意:如果缩放到足以显示单独的标记,则可以单击它们以显示标题。如果不是,那么您的代码中还有更多错误。

于 2014-04-02T19:53:27.087 回答