我正在使用集群管理器在地图上渲染图钉,所有图钉项目都有其自己的图标网址,我应该从网址设置图标。对于第一个渲染,一切正常。但是我需要在点击事件或其他内容上更新一些标记图标。我有自定义群集渲染器,可以在其中动态设置自定义图标,并且可以正常工作
....
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()