我是 Android 的新手 BottomSheet
并且我已经成功地尝试了有关如何使用它的示例,但大多数示例仅演示了通过查看点击事件显示/隐藏 BottomSheet。
现在我有以下代码:
BottomSheetBehavior mBottomSheetBehavior;
@Ghi đè
protected void onCreate() {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View bottomSheet = findViewById(R.id.bottom_sheet);
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setPeekHeight(0);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
现在,我只想知道当状态为 BottomSheetBehavior.STATE_HIDDEN
时,是否可以通过从屏幕底部边缘拉/拖来显示 BottomSheet。 peekHeight 是 0
?,类似于 DrawerLayout 的行为?
我认为 BottomSheetBehavior 不提供该功能,但您可以拦截包含 Activity 中的触摸事件,并在检测到底部拉动时展开 Bottom Sheet :
@Ghi đè
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bottomPullDetector = new GestureDetectorCompat(this, new BottomPullListener());
}
@Ghi đè
public boolean dispatchTouchEvent(MotionEvent ev) {
return bottomPullDetector.onTouchEvent(ev) || super.dispatchTouchEvent(ev);
}
private class BottomPullListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 20;
private final int displayHeight;
private boolean beginningOnBottom;
BottomPullListener() {
final Point displaySize = new Point();
getWindowManager().getDefaultDisplay().getSize(displaySize);
displayHeight = displaySize.y;
}
@Ghi đè
public boolean onDown(MotionEvent event) {
beginningOnBottom = displayHeight - event.getY() < SWIPE_THRESHOLD;
return beginningOnBottom;
}
@Ghi đè
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (beginningOnBottom && e1.getY() > e2.getY()) {
cameraFragment.expandBottomSheet();
trả về giá trị đúng;
}
trả về false;
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!