Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相机停止移动一段时间后更新谷歌地图_Java_Android_Google Maps_Google Api - Fatal编程技术网

Java 相机停止移动一段时间后更新谷歌地图

Java 相机停止移动一段时间后更新谷歌地图,java,android,google-maps,google-api,Java,Android,Google Maps,Google Api,我仍然不相信我找不到任何问题,所以请随意给我指一个 我正在使用谷歌地图实现一个显示几个标记的应用程序。我想使其动态,以便只绘制可见标记。为此,我希望能够知道地图何时完全停止,然后等待几秒钟,这样我就不会在用户可能仍在移动地图时乱动地图,然后清除标记并绘制新的标记。如果用户在计时器启动前移动,则必须取消,然后再次开始计数 到目前为止,我使用onCameraChangeListener成功地使摄影机在动画停止时更改为激发,但指定在动画中期仍可能调用该命令。这样做对吗 第二个问题是关于计时器。我目前的

我仍然不相信我找不到任何问题,所以请随意给我指一个

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

到目前为止,我使用
onCameraChangeListener
成功地使摄影机在动画停止时更改为激发,但指定在动画中期仍可能调用该命令。这样做对吗

第二个问题是关于计时器。我目前的执行情况如下:

map.setOnCameraChangeListener(new OnCameraChangeListener() {
    public void onCameraChange(CameraPosition position) {
        refresher.schedule(new refreshMapData(), 2000);
    }
});
实际上更新必要标记的计时器是:

class refreshMapData extends TimerTask{

    public void run() {
        map.clear();
        for ( ... ) {
            map.addMarker( ... );
        }
    }
}
这显然引发了一个“不在主线程上”异常,并将我引向下一个问题:这个问题的解决方法是什么?如果不允许我在主线程之外修改GoogleMap的值,我如何使用计时器来修改它


编辑:关于第一个问题,我想我只需要比较一下自上次以来职位是否发生了变化,这样就可以了。只需要计时器更新问题的答案。

您最好使用
处理程序。这不会创建不必要的额外线程

只要把这个叫做onCameraChange:

handler.removeMessages(MSG_ID);
handler.sendEmptyMessageDelayed(MSG_ID, 2000);
在你的工作中

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


如果要显示数千个标记,请尝试,它只内置可见标记。

我不知道您是否一直需要一个好的解决方案,但我发现并认为这可能会有所帮助。它可以帮助我,解释如何使用群集管理器以及如何设置。

您现在可以分享这篇文章的全部代码了吗。我想要it@QadirHussain不幸的是,我不能再访问该项目了。无论如何,我最终使用了MaciejGórski的lib,所以如果我是你的话,我会尝试一下。非常合理且经过深思熟虑的解决方案,我可以保证这适用于常规用例,例如在地图上移动一个标记,当它确定标记落在上面的文本框中的位置或类似的情况。在此之前,它将冻结,因为onCameraChange中的代码每次发生更改时都会运行。