Android BottomSheetBehavior 回调方法 onSlide() 给出了令人困惑的 slideOffset 值
Android BottomSheetBehavior callback method onSlide() gives confusing slideOffset values
我正在实施一个应用程序,我在其中使用具有 @string/bottom_sheet_behavior
定义的行为的底部 sheet。此外,我以编程方式设置了 BottomSheetBehavior.BottomSheetCallback()
,因为我想使用 onSlide() 方法为填充设置动画。因此我真的需要 slideOffset 值来计算要设置的新填充。
我看了docs。他们在那里说,当状态介于隐藏和折叠状态之间时,该值的范围从 -1 到 0。只有当我的 phone 或平板电脑处于纵向模式并且独立于 android 版本时,我才能看到此行为。然而在横向模式下,范围从 1 到 -1。
这里详细介绍了底部 sheet 从隐藏到扩展的价值历史:
D/SLIDE: -0.86160713
D/SLIDE: -0.5714286
D/SLIDE: -0.29910713
D/SLIDE: -0.0625
D/SLIDE: 0.11382114
D/SLIDE: 0.27235773
D/SLIDE: 0.40650406
D/SLIDE: 0.51626015
D/SLIDE: 0.6300813
D/SLIDE: 0.69512194
D/SLIDE: 0.75609756
D/SLIDE: 0.8130081
D/SLIDE: 0.8577236
D/SLIDE: 0.8943089
D/SLIDE: 0.9186992
D/SLIDE: 0.9430894
D/SLIDE: 0.9593496
D/SLIDE: 0.97154474
D/SLIDE: 0.9796748
D/SLIDE: 0.9878049
D/SLIDE: 0.9918699
D/SLIDE: 0.99593496
D/SLIDE: 1.0
我只在单击按钮时设置底部的新状态 sheet。
所需的值将从 -1 开始,到 0.0 结束,中间有更精细的步骤。在此历史记录中,值也会增加,但会上升到 +1。
有没有其他人不得不面对同样的奇怪行为并且可以给我提示我错过了什么?
如果需要任何其他代码,我会更新我的问题。
提前致谢。
彼得
BottomSheetBehavior 有 3 个 "fixed" 状态:
- STATE_EXPANDED
- STATE_COLLAPSED
- STATE_HIDDEN
根据文档:
此底部的新偏移量 sheet 在 [-1,1] 范围内。抵消
随着底部 sheet 向上移动而增加。从 0 到 1 sheet
介于折叠和展开状态之间,从 -1 到 0 它是
在隐藏和折叠状态之间。
可以用setHideable
的方法exclude/includeSTATE_HIDDEN。
我遇到了和你一样的问题,我不能说问题已经解决了,因为 BottomSheetBehavior.BottomSheetCallback()
的 onSlide
方法的行为不符合 documentation(值来自-1 到 1),但至少我能够通过将峰高设置为 0 来对其进行标准化,如下所示:
bottomSheetBehavior.setPeekHeight(0);
添加此行后,我看到 onSlide
方法始终具有正值 (0 - 1)。
我仍在努力了解正在发生的事情,以便找到更好的解决方案。
我正在实施一个应用程序,我在其中使用具有 @string/bottom_sheet_behavior
定义的行为的底部 sheet。此外,我以编程方式设置了 BottomSheetBehavior.BottomSheetCallback()
,因为我想使用 onSlide() 方法为填充设置动画。因此我真的需要 slideOffset 值来计算要设置的新填充。
我看了docs。他们在那里说,当状态介于隐藏和折叠状态之间时,该值的范围从 -1 到 0。只有当我的 phone 或平板电脑处于纵向模式并且独立于 android 版本时,我才能看到此行为。然而在横向模式下,范围从 1 到 -1。
这里详细介绍了底部 sheet 从隐藏到扩展的价值历史:
D/SLIDE: -0.86160713
D/SLIDE: -0.5714286
D/SLIDE: -0.29910713
D/SLIDE: -0.0625
D/SLIDE: 0.11382114
D/SLIDE: 0.27235773
D/SLIDE: 0.40650406
D/SLIDE: 0.51626015
D/SLIDE: 0.6300813
D/SLIDE: 0.69512194
D/SLIDE: 0.75609756
D/SLIDE: 0.8130081
D/SLIDE: 0.8577236
D/SLIDE: 0.8943089
D/SLIDE: 0.9186992
D/SLIDE: 0.9430894
D/SLIDE: 0.9593496
D/SLIDE: 0.97154474
D/SLIDE: 0.9796748
D/SLIDE: 0.9878049
D/SLIDE: 0.9918699
D/SLIDE: 0.99593496
D/SLIDE: 1.0
我只在单击按钮时设置底部的新状态 sheet。
所需的值将从 -1 开始,到 0.0 结束,中间有更精细的步骤。在此历史记录中,值也会增加,但会上升到 +1。
有没有其他人不得不面对同样的奇怪行为并且可以给我提示我错过了什么?
如果需要任何其他代码,我会更新我的问题。
提前致谢。
彼得
BottomSheetBehavior 有 3 个 "fixed" 状态:
- STATE_EXPANDED
- STATE_COLLAPSED
- STATE_HIDDEN
根据文档:
此底部的新偏移量 sheet 在 [-1,1] 范围内。抵消 随着底部 sheet 向上移动而增加。从 0 到 1 sheet 介于折叠和展开状态之间,从 -1 到 0 它是 在隐藏和折叠状态之间。
可以用setHideable
的方法exclude/includeSTATE_HIDDEN。
我遇到了和你一样的问题,我不能说问题已经解决了,因为 BottomSheetBehavior.BottomSheetCallback()
的 onSlide
方法的行为不符合 documentation(值来自-1 到 1),但至少我能够通过将峰高设置为 0 来对其进行标准化,如下所示:
bottomSheetBehavior.setPeekHeight(0);
添加此行后,我看到 onSlide
方法始终具有正值 (0 - 1)。
我仍在努力了解正在发生的事情,以便找到更好的解决方案。