繁体   English   中英

相机停止移动一段时间后更新Google地图

[英]Update Google Maps after a while when camera stopped moving

我仍然不相信我在SO上找不到任何问题,所以请随意指出一个问题。

我正在使用Google地图实现一个显示多个标记的应用程序。 我想让它变得动态,以便只绘制标记。 为此,我希望能够知道地图何时完全停止,然后等待几秒钟,这样我就不会乱用地图,而用户可能仍在移动地图,然后清除标记并绘制新标记。 如果用户在计时器触发之前移动,则必须取消,然后再次开始计数。

到目前为止,我设法在使用onCameraChangeListener停止动画时将相机更改为触发,尽管它的定义指定在动画中期仍然可以调用它。 这是正确的方法吗?

第二个问题是关于计时器。 我目前的实施如下:

map.setOnCameraChangeListener(new OnCameraChangeListener() {
    public void onCameraChange(CameraPosition position) {
        refresher.schedule(new refreshMapData(), 2000);
    }
});

实际更新必要标记的Timer是这样的:

class refreshMapData extends TimerTask{

    public void run() {
        map.clear();
        for ( ... ) {
            map.addMarker( ... );
        }
    }
}

这显然引发了“不在主线程上”的异常并引导我进入下一个问题:这个问题的解决方法是什么? 如果我不允许从主线程外部执行此操作,如何使用计时器修改Google Map的值?

编辑:关于第一个问题,我猜我只需要比较一下自上次以来该位置是否发生了变化以便这样做。 只需要定时更新问题的答案。

你最好使用Handler 这不会创建额外的线程,这是不必要的。

只需在onCameraChange中调用它:

handler.removeMessages(MSG_ID);
handler.sendEmptyMessageDelayed(MSG_ID, 2000);

并在handleMessage中完成你的工作。

如果只显示几个标记,为什么还需要动态? 可见区域外的标记不会慢得多。 清除和添加标记的代码可能会使其变慢。

如果您要显示数千个标记,请尝试Android Maps Extensions ,它只添加了内置的可见标记。

我不知道你是否需要一个好的解决方案,但我发现这个问题并认为可以提供帮助。 它帮助了我, 这个人写了一篇博客文章,解释了如何使用集群管理器以及如何设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM