android - 谷歌地图实用程序中集群的背景渲染

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

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

(链接是直接到代码) 第 69 行的评论说明了一切: //注意:该方法在 UI 线程上运行。不要在这里花费太多时间(如本例所示)。

我的项目有一些较重的渲染,并且在操作 map 时会产生一些滞后。我尝试将代码移至 AsyncTask,但随后它仅呈现默认标记。

我尝试将代码移至 onClusterRendered(),但 map 响应速度更慢。 我想我可以为我的集群预渲染很多可能性,但这感觉不是最好的方法

我正在尝试找出正确的方法来使此操作顺利进行。代码会更好

最佳答案

老问题,但我遇到同样的问题时来到这里。

我认为问题在于 onBeforeClusterRenderedmarkerOptions 参数是一个局部变量,在渲染期间/之后被丢弃。

相反,保留对 cluster 参数的引用允许您在加载图标后调用 getMarker(cluster),这将返回标记(如果它仍然存在)或null。然后您可以使用marker.setIcon(...)

为了避免暂时看到默认标记,您可以隐藏该标记,直到加载图标为止。

这对我来说效果很好,并且在加载图标时保持 map /UI 响应。

@Override
protected void onBeforeClusterRendered(Cluster<Person> cluster, MarkerOptions markerOptions) {
    // Hide default marker, load icon on background thread and unhide.
    markerOptions.visible(false);
    new LoadClusterMarkersAsync(cluster).execute();
}

private class LoadClusterMarkersAsync extends AsyncTask<Void, Void, Void> {
    private Cluster<Person> cluster;

    public LoadClusterMarkersAsync(Cluster<Person> cluster) {
        super();
        this.cluster = cluster;
    }

    @Override
    protected Void doInBackground(Void... v) {
        // Load icon...
        return null;
    }

    @Override
    protected void onPostExecute(Void v) {
        super.onPostExecute(v);
        Marker marker = getMarker(cluster);
        if (marker != null) {
            marker.setIcon(...);
            marker.setVisible(true);
        }
    }
}

关于android - 谷歌地图实用程序中集群的背景渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640827/

相关文章:

java - Android中如何获取方法名称?

google-maps - Google map : How to draw labels (country, 城市名称等)在我的叠加层上

javascript - 如何在 Google map v3 上添加和删除多边形?

google-maps-api-3 - 谷歌地图标记的外部链接

javascript - 如何使用 if 条件测试 Google map 地点类型

java - Google android maps api v2 始终显示标记标题

java - Android下Bitmap.setPixels扭曲颜色

java - Android SQLite 异常

android - 我的 Android 应用程序的 apk 文件在哪里? (通过 eclipse )

javascript - 使用自定义图标的 Angular 谷歌地图