首页 > 解决方案 > 谷歌地图从 url 更新集群标记图标

问题描述

我正在使用集群管理器在地图上呈现图钉,所有图钉项目都有自己的图标 url,我应该从 url 设置图标。对于第一次渲染,一切正常。但我需要在点击事件或其他东西上更新一些标记图标。我有自定义集群渲染器,我在其中动态设置自定义图标并且它可以工作

....

override fun onBeforeClusterItemRendered(item: T, markerOptions: MarkerOptions?) {
    try {
        val pin = item as OfferPinItem
        markerOptions?.icon(getDefaultPinIcon(pin.isClicked, pin.isSelected))
        pin.loadPinIconWithCallback(context, pin.isClicked) {
            markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(it))
        }
        super.onBeforeClusterItemRendered(item, markerOptions)

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

当我只需要更新标记图标时,我使用以下逻辑:

 data.map { pin ->
    pin.isClicked = pin.id == highlightedPin

        if (clusterManager.markerCollection != null) {
            val existingMarker =
                clusterManager.markerCollection.markers.firstOrNull { m -> m.position == pin.getPosition() }
            if (existingMarker != null) {
                updateMarkerIcon(context, existingMarker, pin, pin.isClicked)
            }
    }
    pin
}

调用这些代码后,有时会出现两个图标:(一个是点击之前的图标(默认图标),第二个是活动图标

我也尝试只调用重新集群图标,但 onBeforeClusterItemRendered 没有被调用第二次:

 clusterManager.clearItems()
    clusterManager.addItems(filteredItems)
    clusterManager.cluster()

标签: androidgoogle-mapsgoogle-maps-markersmarkerclusterer

解决方案


推荐阅读