Android BottomSheet适应/收缩相关的地图视图

时间:2017-08-14 15:46:52

标签: android google-maps-android-api-2 android-coordinatorlayout android-collapsingtoolbarlayout bottom-sheet

尝试模仿底部的当前谷歌地图栏。 我失败了,尝试了这么多; CollapsingToolbar,BottomSheet,自定义库。

我想要的是什么:当BottomSheet滑动时,使地图视图调整其大小和相机,这样底部工作表不会在地图上滑动,而是地图适合于空间左

看看this video看看我的意思(我不是指缩放功能)

1 个答案:

答案 0 :(得分:0)

我不推荐使用BottomBar library 。但是也许我的代码让您知道了如何实现。

我对BottomSheet的onSlide事件做出了这样的反应:

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
    switch (bssBehavior.getState()) {
        case BottomSheetBehavior.STATE_DRAGGING:
            setMapPaddingBotttom(slideOffset);
            searchVM.map.moveCamera(CameraUpdateFactory.newLatLng(lastValidMapCenter));
            break;
        case BottomSheetBehavior.STATE_SETTLING:
            setMapPaddingBotttom(slideOffset);
            searchVM.map.moveCamera(CameraUpdateFactory.newLatLng(lastValidMapCenter));
            break;
        case BottomSheetBehavior.STATE_HIDDEN:
            break;
        case BottomSheetBehavior.STATE_EXPANDED:
            break;
        case BottomSheetBehavior.STATE_COLLAPSED:
            break;
    }

并通过更改其填充平滑调整地图的大小。为了进行相应的计算,我使用了某物。这样。

private void setMapPaddingBotttom(Float offset) {
    //From 0.0 (min) - 1.0 (max)
    Float maxMapPaddingBottom = bsExpanded - bsCollapsed;
    //left,top,right,bottom
    searchVM.map.setPadding(0, 0, 0, Math.round(offset * maxMapPaddingBottom));
}