Android BottomSheetBehavior回调方法onSlide()给出了令人困惑的slideOffset值

时间:2016-10-24 15:22:10

标签: android material-design bottom-sheet

我正在实现一个应用程序,其中我使用具有@string/bottom_sheet_behavior定义的行为的底部工作表。另外,我以编程方式设置BottomSheetBehavior.BottomSheetCallback(),因为我想使用onSlide()方法为填充设置动画。因此我真的需要slideOffset值来计算要设置的新填充。 我读了docs。他们说,当状态介于隐藏和折叠状态之间时,值的范围是-1到0。当我的手机或平板电脑处于纵向模式且独立于Android版本时,我才能看到此行为。但是在横向模式下,范围从1到-1。 这里详细介绍了从隐藏到扩展的底页的值历史记录:

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

我只在按钮点击时设置底部工作表的新状态。 所需的值将从-1开始并以0.0结尾,其间的粒度更精细。在这段历史中,价值也会增加,但它们会增加到+1 是否有其他人不得不面对同样的奇怪行为,并能给我一个暗示我缺少的东西? 如果需要任何其他代码,我会更新我的问题。

提前致谢。
彼得

2 个答案:

答案 0 :(得分:2)

我遇到了与您相同的问题,我不能说问题已得到解决,因为onSlide的{​​{1}}方法不符合documentation(-1的值)到1),但至少我能够通过将峰高设置为0来标准化它,如下所示:

BottomSheetBehavior.BottomSheetCallback()

添加此行后,我看到bottomSheetBehavior.setPeekHeight(0);方法始终具有正值(0 - 1)。

我仍在努力了解正在发生的事情,以便找到更好的解决方案。

答案 1 :(得分:1)

BottomSheetBehavior有3"固定"规定:

  • STATE_EXPANDED
  • STATE_COLLAPSED
  • STATE_HIDDEN

根据文件:

此底页的新偏移量在[-1,1]范围内。抵消 随着这个底部纸张向上移动而增加。从0到1表 在折叠状态和展开状态之间,从-1到0 在隐藏和崩溃的状态之间。

您可以使用setHideable方法排除/包含STATE_HIDDEN。