1

上下にスライドして、ボトムシート ビューの 3 つの状態を処理する必要があります。たとえば、現在の状態が STATE_EXPANDED に等しい場合、下にスワイプすると状態が STATE_HALF_EXPANDED に変更され、もう一度下にスワイプすると STATE_COLLAPSED に変更されます。これは私が持っているコードです(slideOffsetで作業しようとしましたが、失敗しました):

BottomSheetBehavior.from(view.findViewById<LinearLayout>(R.id.bottom_sheet)).apply {
            peekHeight = Resources.getSystem().displayMetrics.heightPixels / 2
            this.state = BottomSheetBehavior.STATE_COLLAPSED
            this.addBottomSheetCallback(object :
                    BottomSheetBehavior.BottomSheetCallback() {

            override fun onSlide(bottomSheet: View, slideOffset: Float) {
                if(slideOffset <= 0.7) {
                    if(prevOffset - slideOffset > 0) {
                        BottomSheetBehavior.from(bottomSheet).state = BottomSheetBehavior.STATE_COLLAPSED
                    }
                    else {
                        BottomSheetBehavior.from(bottomSheet).state = BottomSheetBehavior.STATE_HALF_EXPANDED
                    }
                }
                else {
                    if(prevOffset - slideOffset > 0) {
                        BottomSheetBehavior.from(bottomSheet).state = BottomSheetBehavior.STATE_HALF_EXPANDED
                    }
                    else {
                        BottomSheetBehavior.from(bottomSheet).state = BottomSheetBehavior.STATE_EXPANDED
                    }
                }
                prevOffset = slideOffset
            }

            override fun onStateChanged(bottomSheet: View, newState: Int) {
                when(newState) {
                    BottomSheetBehavior.STATE_EXPANDED -> peekHeight = Resources.getSystem().displayMetrics.heightPixels
                    BottomSheetBehavior.STATE_HALF_EXPANDED -> peekHeight = (Resources.getSystem().displayMetrics.heightPixels * 0.7).toInt()
                    BottomSheetBehavior.STATE_COLLAPSED -> peekHeight = Resources.getSystem().displayMetrics.heightPixels / 2
                }
            }
        })
    }
4

0 に答える 0