在谷歌地图utils群集的背景渲染

时间:2014-05-13 20:19:05

标签: android google-maps google-maps-markers google-maps-android-api-2

为了简化问题,我将参考Google Maps Utils library demo project - custom marker clustering activity

(链接是直接代码) 对第69行的评论说明了一切: //注意:此方法在UI线程上运行。不要在这里花太多时间(比如在这个例子中)。

我的项目有一些较重的渲染,在操作地图时会产生一些滞后。我尝试将代码移动到AsyncTask但是它只渲染默认标记。

我尝试将代码移动到onClusterRendered(),但地图响应速度更慢。 我想我可以预先渲染我的群集的许多可能性,但这不是最好的方法

我正在试图找出使其顺利运行的正确方法。代码会更好

2 个答案:

答案 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) { ...