使用 google maps utils 从 url 渲染集群图标

Posted

技术标签:

【中文标题】使用 google maps utils 从 url 渲染集群图标【英文标题】:Render cluster icon from url using google maps utils 【发布时间】:2019-09-13 10:52:08 【问题描述】:

我为每个集群项目使用动态图标,所以我有特殊的图标 url 并从 url 加载标记图标。我使用以下代码:

override fun onBeforeClusterItemRendered(item: T, markerOptions: MarkerOptions?) 

    super.onBeforeClusterItemRendered(item, markerOptions)
try 
    var url = URL("https://cdn3.iconfinder.com/data/icons/places/100/map_pin_big_1-128.png")
    Glide.with(context)
        .asBitmap()
        .load(url)
        .into(object : CustomTarget<Bitmap>() 
            override fun onLoadCleared(placeholder: Drawable?) 
            

            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) 
                markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(resource))
            

        )

 catch (ex: Exception) 
    Log.e("map", ex.toString())

在我的情况下,一些图标仍然是默认的,在放大缩小图标后有时会发生变化。问题是此代码不适用于每个集群项目,在缩放更改集群图标也更改后,它可能会呈现我的自定义图标并可能使用默认值。

【问题讨论】:

关于 android 图片加载库的问题请不要使用 glide 标签 - 请改用 [android-glide]。 【参考方案1】:

你只需要在里面制作所有这些东西

protected void onClusterItemRendered(T clusterItem, Marker marker) 
...

在 onBeforeClusterItemRendered 中,您在异步回调中的 MarkerOptions 上设置了图标。这时候就可以添加到地图上,成为真正的Marker了。所以你的图标将被设置为已经无用的对象。

这就是为什么你需要在 onClusterItemRendered 中这样做

唯一要改变的区别:

markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(resource))

到:

marker.setIcon(BitmapDescriptorFactory.fromBitmap(resource))

参考:Refreshing makers (ClusterItems) in Google Maps v2 for Android

感谢https://***.com/users/3252320/stas-parshin

【讨论】:

游戏迟到了,但这个解决方案为我解决了这个问题。

以上是关于使用 google maps utils 从 url 渲染集群图标的主要内容,如果未能解决你的问题,请参考以下文章

使用 Googles android-maps-utils 在最大缩放级别禁用集群

Android Google Map Utils 聚类距离

无法通过 gradle 导入 com.google.maps.android:android-maps-utils

java.lang.NoSuchMethodError: com.google.common.collect.Maps.newConcurrentMap()Ljava/util/concurrent/

无法运行 Google Maps Android API Utility Demo

Google Maps API - 坐标地址(纬度,经度)