【问题标题】:BottomSheet sliding very slowlyBottomSheet 滑动非常缓慢
【发布时间】:2018-07-04 17:31:33
【问题描述】:

你好
我想根据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 的填充。
如何解决这个问题?

【问题讨论】:

    标签: android padding android-coordinatorlayout bottom-sheet


    【解决方案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() 方法更多地用于响应状态的变化,例如显示或隐藏其他视图等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2011-10-28
      • 2010-10-24
      • 1970-01-01
      • 2021-11-11
      • 2019-08-11
      • 2010-10-31
      相关资源
      最近更新 更多