【问题标题】:android-maps-extensions infoWindow doesn't showandroid-maps-extensions infoWindow 不显示
【发布时间】:2014-04-03 04:04:22
【问题描述】:

我需要在地图上显示 >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 属性。

【问题讨论】:

  • 您从onMarkerClick返回false的任何原因?当您使用InfoWindowAdapter 时,它是否显示任何信息窗口?
  • @MaciejGórski 当我返回 false 时,会出现默认行为,如标记上的中心地图。当我使用自己的InfoWindowAdapter 时,它会显示固定大小的窗口,其中包含部分内容。
  • 如果除了示例中提供的代码之外没有任何代码,您可以删除 OnMarkerClickListener,因为显示信息窗口是默认行为。

标签: android android-maps-extensions


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复。即使在最大缩放时也没有信息窗口。无论如何,我会在 GitHub 上 fork repo 并尝试将标题转发到 virtual 标记。
  • @Vladimir 如果您将集群图标颜色更改为float hue = BitmapDescriptorFactory.HUE_BLUE; 并找到红色标记(这些将是您添加并为其设置标题的标记),它们不会显示信息窗口?
  • 当我使用蓝色标记时,不会出现红色。即使在最大缩放级别。
  • @Vladimir 那就是原因。你所有的标记总是聚集在一起。它们必须彼此靠得太近,否则您会多次添加每个标记。
猜你喜欢
  • 2015-09-06
  • 2011-05-16
  • 2014-02-13
  • 1970-01-01
  • 2023-03-17
  • 2020-02-17
  • 1970-01-01
  • 2014-01-28
  • 2018-10-28
相关资源
最近更新 更多