android - 谷歌地图从 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()
解决方案
推荐阅读
- entity-framework - 自实体框架更新以来的奇怪问题
- html - 如何仅使用创建表标签和引导程序?
- linux - 为什么 deCONZ 劫持我的蓝牙设备,我该怎么办?
- android - Android ormlite config getters 关系深度
- regex - 系统日志模板中的正则表达式
- c# - 如何在 asp.net 中创建注册前缀 Uri?
- javascript - 焦点时如何在同一位置获取特定输入框的ID
- c# - Outlook 帐户 - 如何获取 Exchange 电子邮件地址?
- google-analytics - 在 Google Analytics 中,如何为虚拟页面浏览量计算平均页面负载
- java - 回收器添加侦听器 onScrollStateChanged 回调滚动状态“SCROLL_STATE_IDLE”,延迟时间不可忽略