android - 使用 google maps utils 从 url 渲染集群图标
问题描述
我为每个集群项目使用动态图标,所以我有特殊的图标 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())
}
}
在我的情况下,某些图标仍然是默认的,有时放大缩小图标会发生变化。问题是此代码不适用于每个集群项目,在缩放更改集群图标也更改后,它可能会呈现我的自定义图标并可能使用默认值。
解决方案
你只需要把所有这些东西都放进去
protected void onClusterItemRendered(T clusterItem, Marker marker) {
...
}
在 onBeforeClusterItemRendered 中,您在异步回调中的 MarkerOptions 上设置图标。这时候就可以添加到地图上,成为真正的Marker了。所以你的图标将被设置为已经无用的对象。
这就是为什么你需要在 onClusterItemRendered
唯一的区别是改变:
markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(resource))
至:
marker.setIcon(BitmapDescriptorFactory.fromBitmap(resource))
推荐阅读
- google-apps-script - 在单个 Google AdWords 脚本中获取 150 多个帐户的 AdWords 数据,为期 2 周
- javascript - 何时使用 vuex 存储数据而不是本地组件数据?
- android - 将多个值绑定到一个控件 Xamarin.Android MVVMCross MVX
- c# - 在带有 Plesk 的 Ubuntu 中使用 ASP.NET Core 时出错
- c - 服务器没有向客户端返回最后一个响应消息
- json - 如何按 ID 对 JSON 数组进行排序?
- jsf - 提交jsf页面后valueChangeListener没有调用
- java - Java:转义 XML 文本内容而不是整个文本
- python-3.x - 有没有办法将烧瓶服务器与其他简单的文件传输服务器通信?
- python - Matrix.itam((i,j)) 无法正常工作