android - 在Android中如何在滑动时获取BottomSheet的当前高度?
问题描述
当我在我的应用程序中滑动持久底部表时,我想知道那一刻底部表的当前高度。我尝试调用 BottomSheetCallback 的 onSlide 方法,但没有成功。
bottomSheetView = findViewById(R.id.bottom_sheet);
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(BottomSheetBehavior.STATE_DRAGGING == newState)
Log.i("MainActivity", "onStateChanged >> " + bottomSheet.getHeight());
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
Log.i("MainActivity", "onSlide bottomSheet>> " + bottomSheet.getHeight());
Log.i("MainActivity", "onSlide bottomSheetView>> " + bottomSheetView.getHeight());
}
});
解决方案
我认为滑动时高度不会改变,因为底片的实际视图没有改变。底板本身只是向下滑动。
但是您仍然可以通过使用bottomSheetView 的locationOnScreen进行一点计算来获得高度。
例如:
bottomSheetBehavior.addBottomSheetCallback(object :
BottomSheetBehavior.BottomSheetCallback() {
override fun onSlide(bottomSheet: View, slideOffset: Float) {
var locationOnScreen: IntArray = intArrayOf(0, 0)
bottomSheet.getLocationOnScreen(locationOnScreen)
Log.d(
"BottomSheet",
"slideOffset: $slideOffset - view height: ${locationOnScreen[0]},${locationOnScreen[1]}"
)
}
override fun onStateChanged(bottomSheet: View, newState: Int) {
Log.d("BottomSheet", "State: $newState")
}
})
当 BottomSheet 向上/向下滑动时,locationOnScreen 的值会不断变化。