Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google Maps API for Android中为地图片段设置动画_Android_Google Maps_Android Fragments_Material Design_Android Animation - Fatal编程技术网

如何在Google Maps API for 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()刷新布局但我无法产生像谷歌地图应用程序那样流畅的效果。我想到的另

我正在开发一个应用程序,使用谷歌地图API的Android。我想创建一个类似于Android版谷歌地图应用程序的动画效果,无论其状态如何,它都会将地图片段保持在底部页面的上方。效果如下:


我尝试了给定的
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;
        }
    }