如何在Android中顺利平移谷歌地图?

时间:2015-11-20 22:29:40

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

我有一个对象以每秒1到10之间的速率传输Locations。我希望我的GoogleMap(Android,v2)能够连续平滑地将对象保持在地图中心附近。我怎么能这样做?

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

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

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

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

有关如何实现此效果的任何建议?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以设想让位置更新为地图设置动画,以使设备位置(或其他内容)保持在地图的中心位置。

您所引用的Google导航似乎执行了一些无法重新调整,这意味着即使在位置更新之间的10秒内,位置也不会从一个点跳到另一个点,而是在某个点上顺利移动以一定的速度前进。

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

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

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

希望你明白这一点,尽管有点模糊,但对你有所帮助。