Android BottomSheet: как узнать, перетаскивает ли пользователь вверх или вниз нижнюю таблицу? - PullRequest
1 голос
/ 14 февраля 2020

У меня есть приложение с нижней страницей, открытой до 90% высоты экрана. Как я могу узнать, перетаскивает ли пользователь вверх / вниз нижнюю страницу. Я читал, что мы можем использовать onSlide (), но значения смещения NaN, а иногда и просто странно, так что это кажется ненадежным. Любая помощь приветствуется. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2020

Использование поведения нижнего листа

private BottomSheetBehavior sheetBehavior;
private LinearLayout bottom_sheet;
bottom_sheet = findViewById(R.id.bottom_sheet);
sheetBehavior = BottomSheetBehavior.from(bottom_sheet);
// click event for show-dismiss bottom sheet
btn_bottom_sheet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
        sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        btn_bottom_sheet.setText("Close sheet");
    } else {
        sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        btn_bottom_sheet.setText("Expand sheet");
    }
}
});
// callback for do something
sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View view, int newState) {
    switch (newState) {
        case BottomSheetBehavior.STATE_HIDDEN:
            break;
        case BottomSheetBehavior.STATE_EXPANDED: {
            btn_bottom_sheet.setText("Close Sheet");
        }
        break;
        case BottomSheetBehavior.STATE_COLLAPSED: {
            btn_bottom_sheet.setText("Expand Sheet");
        }
        break;
        case BottomSheetBehavior.STATE_DRAGGING:
            break;
        case BottomSheetBehavior.STATE_SETTLING:
            break;
    }
}

@Override
public void onSlide(@NonNull View view, float v) {

}
});
0 голосов
/ 14 февраля 2020

Вы можете добавить a BottomSheetCallback, чтобы узнать статус и направление.

Что-то вроде:

    BottomSheetBehavior<...> bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetLayout);

    bottomSheetBehavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {

      @Override public void onStateChanged(@NonNull View bottomSheet, int newState) {
        if (newState == BottomSheetBehavior.STATE_DRAGGING){
            // Dragging state
        }    
      }

      @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        // The new offset of this bottom sheet within [-1,1] range. 
        // Offset increasesas this bottom sheet is moving upward. 
        // From 0 to 1 the sheet is between collapsed and expanded states and 
        // From -1 to 0 it is between hidden and collapsed states.
      }
    });
0 голосов
/ 14 февраля 2020

В нижней таблице мы можем получить доступ к его поведению с помощью BottomSheetBehavior, получить все состояния в onStateChanged ().

final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                    behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                }
            }

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            }
        });

BottomSheetBehavior.STATE_COLLAPSED

BottomSheetBe. STATE_EXPANDED

...