BottomSheet 滑动很慢

BottomSheet sliding very slowly

你好,
我想根据 bottomSheet 的 slideOffset 更改视图的填充。 但是当我试图在 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 的 Padding。
如何解决这个问题?

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().[=12 之外的尺寸资源 中获取填充作为浮点数=]

不要在 onSlide() 内部做任何过于占用资源的事情,因为它会被调用成一堆,这可能是你的 bottomsheet 滑动缓慢的原因,即使它看起来不像你在这里做的那样。

此外,您不需要跟踪底部 Sheet 的状态,因为您可以随时调用:

if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
  // Bottom sheet is expanded 
}
else if (behavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
  // Bottom sheet is collapsed
}

onStateChanged() 方法更适用于通过显示或隐藏其他视图等方式对正在更改的状态做出反应。