【发布时间】:2015-11-20 22:29:39
【问题描述】:
我有一个对象以每秒 1 到 10 个的速率传输位置。我希望我的 GoogleMap(Android,v2)能够连续平稳地平移以使对象保持在地图中心附近。我该怎么做?
简单的方法是在收到每个新位置时调用 GoogleMap.moveCamera。但是,这会导致显示不稳定;地图会跳到每个新位置,而不是平滑地平移到它。
更好的方法是调用 GoogleMap.animateCamera - 将相机平稳地平移到新位置。但是,当新位置的到达速度快于动画完成的速度时,每个 animateCamera 调用都会取消先前的动画并启动一个新动画。所有动画都开始缓慢,然后加速,然后快速减速。这意味着不断启动新动画意味着相机总是非常缓慢地平移并且无法跟上实际位置。
解决此问题的方法是在动画正在进行时将传入位置排队,然后在前一个动画完成后立即将动画启动到最近的位置。这比以前的两种方法都好,但它仍然会停止并开始,因为每个动画都在完全停止时开始和结束。
似乎实现所需效果的唯一可能方法是编写我自己的动画器,它以高帧速率调用 moveCamera 并在移动时处理加速、减速和新位置。这种方法的问题是我不知道如何限制我的 moveCamera 更新,因为我不知道 GoogleMap 的更新帧率,而且似乎没有任何 setFrameRenderedListener 方法(或类似方法)。
对如何实现这个效果有什么建议吗?
【问题讨论】:
-
附带问题,如果您获得了如此多的位置,以至于每个位置都需要您自己的动画师(或连续平移),那么从用户体验的角度来看,这如何工作,就好像您移动该领域的速度比用户可以摄取信息(或晕车)?
-
连续平移并不意味着快速平移。谷歌地图的导航就是一个平滑连续平移的应用示例。
标签: android google-maps user-interface android-animation smooth-scrolling