上下にスライドして、ボトムシート ビューの 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
}
}
})
}