android - 如何在 Android 中顺利平移 GoogleMap?

标签 android google-maps user-interface android-animation smooth-scrolling

我有一个对象以每秒 1 到 10 个之间的速率流式传输位置。我想让我的 GoogleMap(Android,v2)连续平稳地平移以使对象保持在 map 中心附近。我该怎么做?

天真的方法是在收到每个新位置后简单地调用 GoogleMap.moveCamera。但是,这会导致显示不稳定; map 会跳到每个新位置,而不是平滑地平移到它。

更好的方法是调用 GoogleMap.animateCamera,它可以平滑地将相机平移到新位置。但是,当新 Locations 到达的速度快于动画完成的速度时,每个 animateCamera 调用都会取消之前的动画并启动一个新的动画。所有动画开始时都很慢,然后加速,然后迅速减速。这意味着连续启动新动画意味着相机总是平移得非常慢,无法跟上实际位置。

解决此问题的方法是在动画进行时将传入位置排队,然后在上一个动画完成后立即启动到最近位置的动画。这比以前的两种方法都要好,但它仍然会停止和开始,因为每个动画都是在完全停止时开始和结束的。

似乎实现预期效果的唯一可能方法是编写我自己的动画师,它以高帧率调用 moveCamera 并在移动时处理加速、减速和新位置。这种方法的问题是我不知道如何限制我的 moveCamera 更新,因为我不知道 GoogleMap 的更新帧率并且似乎没有任何 setFrameRenderedListener 方法(或类似方法)。

关于如何实现这种效果有什么建议吗?

最佳答案

如果我对您的理解正确,您设想让传入的位置更新为 map 设置动画,以将设备位置(或其他位置)保持在 map 的中心。

您提到的 Google 导航似乎执行了一些航向侦察,这意味着即使在位置更新之间有 10 秒的时间,位置也不会从一个点跳到另一个点,而是在某个特定的范围内平稳移动以一定的速度前进。

位置更新中提供航向(方位)和速度(如果由 GPS 提供)。

在我看来,类似的东西可能是解决您问题的一种方法。当然,您仍然必须确定您对每个位置更新的信任程度,因为异常值会使它“快速前进”到一个可能不正确的方向。考虑到准确性并丢弃那些包含太多不确定性的因素可能就足够了。

最终,您应该能够执行考虑到一个或多个先前更新的连续相机动画,使您能够每 x 秒触发一次 animateCamera,而不是等待位置更新。

希望你明白这个想法,尽管它有点模糊,但它对你有帮助。

关于android - 如何在 Android 中顺利平移 GoogleMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837133/

相关文章:

java - 如何从文件中分割字符串?

user-interface - 使用 Winelib 移植仅限 Windows 的 GUI 工具包

android - ImageView 周围不需要的填充

javascript - 谷歌用多个独特的信息框映射多个标记

javascript - 使用 Google Maps、C#、ASP.net、SQL Server 显示带标记的 map 。 map 未显示

google-maps - 解码谷歌地图嵌入参数

user-interface - 如何在 MATLAB 中使用按钮打开浏览器窗口?

java - 为什么我的 Inner Join 查询没有返回任何内容?

android - 我怎样才能每小时使用它?现在每天工作 16.30

android - 位置管理器最小位移,具有高精度android