同步移动或动画地图和标记

时间:2019-03-09 11:43:49

标签: android android-animation

我有一个列表,里面有一堆LatLng。我需要为一个标记从一个位置到另一个位置设置动画,直到列表结束(终点)。

我正在使用插值器(类似于@CommonsWare this中的enter link description here实现),将标记从一个位置移动到另一个位置。同时,我还在创建带有生成点的折线。

基于上述,我有一个可行的解决方案。如果将地图设置为最大缩放(21f),即使插值器以大于16ms的速度生成结果,则在新位置添加折线和标记也不会影响UI,就我的眼睛而言,它非常平滑。当然,在某些时候,标记会从屏幕上消失,我必须用手指移动地图以跟踪标记和折线的移动。

我现在希望标记始终保持在屏幕中央,因此地图必须移动。

我尝试使用map.moveCameramap.animateCamera,但是UI有时会变得有些呆滞。我可以看到标记没有像以前那样平滑。之所以使用map.moveCamera是因为使用map.animateCamera的结果甚至更糟。

ObjectAnimator每次插值时调用的函数中,我正在这样做:

public void onNewPosition(LatLng newPosition){
    marker.setPostion(newPosition);
    map.moveCamera(marker.getPosition())
}

如果我将以上内容包装在if条件中,以检查从上次调用到此调用所经过的时间是否大于16ms,则我的UI仍然很慢。

我已经确定了地图运动中的问题。不知道UI是否无法同时渲染地图移动和标记移动是否是问题,因此,似乎有时标记移动而地图不移动,而其他时候则相反(不要不知道我是否正确)

关于如何同时移动地图和标记或满足我需求的其他解决方案的任何想法,即移动标记和地图,以便用户感知到标记正在移动但停留在屏幕的中心,而下面的地图执行所需的移动?

谢谢。

1 个答案:

答案 0 :(得分:2)

您是否可以将地图嵌入两个滚动对象:Horizo​​ntalScrollView和VerticalScrollView,以便可以通过垂直滚动和水平滚动来近似移动?对包含旅行终点的地图视图使用视口。当焦点位置更改时滚动地图视图,而不是调用moveCamera。想法是将重绘开销转移到图形引擎(应该非常擅长)而不是map API。 [我使用了类似的视图架构来滚动火车时间表,并且效果很好。]