如何在Google Maps API for Android中为地图片段设置动画
我正在开发一个应用程序,使用谷歌地图API的Android。我想创建一个类似于Android版谷歌地图应用程序的动画效果,无论其状态如何,它都会将地图片段保持在底部页面的上方。效果如下:如何在Google Maps API for Android中为地图片段设置动画,android,google-maps,android-fragments,material-design,android-animation,Android,Google Maps,Android Fragments,Material Design,Android Animation,我正在开发一个应用程序,使用谷歌地图API的Android。我想创建一个类似于Android版谷歌地图应用程序的动画效果,无论其状态如何,它都会将地图片段保持在底部页面的上方。效果如下: 我尝试了给定的Map.setPadding()来移动底部工作表上方的地图组件(通过在运行时计算底部工作表的高度并将其作为参数传递给上述方法),然后使用ViewGroup.invalidate()和ViewGroup.requestLayout()刷新布局但我无法产生像谷歌地图应用程序那样流畅的效果。我想到的另
我尝试了给定的
Map.setPadding()
来移动底部工作表上方的地图组件(通过在运行时计算底部工作表的高度并将其作为参数传递给上述方法),然后使用ViewGroup.invalidate()
和ViewGroup.requestLayout()刷新布局
但我无法产生像谷歌地图应用程序那样流畅的效果。我想到的另一个解决方案是使用活动转换,但不知道如何在片段中实现它。请帮忙。提前感谢!:) 我自己想出来的。这很简单。如果您使用Android的BottomSheetBehavior
来实现底部工作表,那么在其onStateChanged()
方法中,您可以为Google Maps执行相机动画。这是一种相机动画,在底页状态改变后,借助于CameraUpdate Factory.scrollBy(float,float)
执行,允许您在x轴和y轴上移动相机位置。详情请参阅
我只是更改垂直y轴,因为我希望贴图垂直移动(或调整),并将其传递给mMap.animateCamera()
方法。bs_height
是我在运行时计算的底部板材的高度
下面的代码片段演示了如何:
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch (newState) {
case BottomSheetBehavior.STATE_COLLAPSED :
collapsedStateAnimation();
mMap.animateCamera(CameraUpdateFactory.scrollBy(0.0f, bs_height - 200));
break;
case BottomSheetBehavior.STATE_DRAGGING :
...
break;
case BottomSheetBehavior.STATE_EXPANDED :
mMap.animateCamera(CameraUpdateFactory.scrollBy(0.0f, bs_height + 200));
break;
}
}