为了简化问题,我将参考Google Maps Utils library demo project - custom marker clustering activity
(链接是直接代码) 对第69行的评论说明了一切: //注意:此方法在UI线程上运行。不要在这里花太多时间(比如在这个例子中)。
我的项目有一些较重的渲染,在操作地图时会产生一些滞后。我尝试将代码移动到AsyncTask但是它只渲染默认标记。
我尝试将代码移动到onClusterRendered(),但地图响应速度更慢。 我想我可以预先渲染我的群集的许多可能性,但这不是最好的方法
我正在试图找出使其顺利运行的正确方法。代码会更好
答案 0 :(得分:1)
老问题,但遇到同样问题时我来到这里。
我认为问题在于onBeforeClusterRendered
的{{1}}参数是一个局部变量,在渲染期间/之后被丢弃。
相反,只要引用markerOptions
参数,您就可以在加载图标后调用cluster
,这将返回标记(如果仍然存在)或getMarker(cluster)
。然后,您可以使用null
。
为避免临时看到默认标记,您可以隐藏标记,直到加载图标为止。
这对我来说效果很好,并且在加载图标时使地图/ UI保持响应状态。
marker.setIcon(...)
答案 1 :(得分:0)
override fun onBeforeClusterRendered(
cluster: Cluster<MapItem>,
markerOptions: MarkerOptions
) {
// Draw multiple items.
// Hide markers while getting cluster icon
markerOptions.visible(false)
// This *must* run on the Main thread
lifecycleScope.launch(Dispatchers.Main) {
val icon = getClusterIcon(cluster)
getMarker(cluster)?.apply {
setIcon(icon)
isVisible = true
}
}
}
// Run this on dispatcher optimized for CPU-intensive work
private suspend fun getClusterIcon(cluster: Cluster<MapItem>): BitmapDescriptor =
withContext(Dispatchers.Default) { ...