BottomSheet скользит очень медленно
Привет
я хочу изменить отступы представления в соответствии с slideOffset bottomSheet. Но когда я попытался изменить отступ представления в обратном вызове BoottomSheetBehaviour, скорость скольжения BottomSheet замедляется. вот мой код:
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetExpended = false;
} else if (newState == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetExpended = true;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
int padding = (int) (10 * slideOffset);
nestedScrollView.setPadding(padding, 0, padding, 0);
}
});
Попытка изменить отступы nestedScrollview.
Как решить эту проблему?
1 ответ
Параметр slideOffset изменяется от 0 до 1 при перемещении вверх и от 1 до 0 при перемещении вниз. Если вы хотите перейти от заполнения до отсутствия заполнения при перемещении вверх и от отсутствия заполнения до заполнения при перемещении вниз, сделайте это следующим образом.
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
behavior = BottomSheetBehavior.from(bottomSheet);
// Get Padding value outside of onSlide
final float originalPadding = getActivity().getResources().getDimension(R.dimen.original_padding);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetExpended = false;
} else if (newState == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetExpended = true;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
nestedScrollView.setPadding(Math.round(originalPadding * (1 - slideOffset)),
0, Math.round(originalPadding * (1 - slideOffset)), 0);
}
});
Чтобы сделать это наоборот, просто не вычитайте 1 из смещения слайда.
Примечание: я использую только Math.round(), потому что я получаю заполнение в виде числа с плавающей запятой из ресурсов измерений вне onSlide().
Не делайте ничего слишком ресурсоемкого внутри onSlide(), потому что это называется связкой, и это может быть причиной того, что ваша нижняя таблица медленно скользит, даже если это не похоже на то, что вы делаете это здесь.
Кроме того, вам не нужно отслеживать состояние нижнего листа, потому что вы всегда можете позвонить:
if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
// Bottom sheet is expanded
}
else if (behavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
// Bottom sheet is collapsed
}
Метод onStateChanged() больше подходит для реагирования на изменение состояния с помощью таких вещей, как отображение или скрытие других представлений и т. Д.