我正在尝试复制当前Google地图所具有的行为,该行为允许从底部栏向上滑动时显示底部工作表。请注意,在下面的录音中,我首先点击底部栏中的一个按钮,然后向上滑动,然后再显示它背后的纸张。
我无法在任何地方找到解释如何实现这样的事情。我尝试了探索BottomSheetBehavior并自定义它,但我无处可寻找跟踪初始点击的方法,然后在达到触摸斜率阈值后让工作表接管移动。
如何在不诉诸库的情况下实现此行为?或者是否有任何官方Google / Android视图允许两个部分(导航栏和底部工作表)之间的此行为?
你可以尝试这样的东西(它是Pseudocode,希望你能理解我所得到的):
<FrameLayout id="+id/bottomSheet">
<View id="exploreNearby bottomMargin="buttonContainerHeight/>
<LinearLayout>
<Button id="explore"/>
<Button id="explore"/>
<Button id="explore"/>
</LinearLayout>
<View width="match" height="match" id="+id/touchCatcher"
</FrameLayout>
在覆盖onTouch()上的bottomSheet视图上添加手势检测器。它使用SimpleOnGestureListener
等待“滚动”事件 - 除了滚动事件之外的所有内容,您可以正常复制到视图中。
在滚动事件中,您可以将您的exploreNearby增长为delta(确保它不会递归或转到高或低)。
Bottom表类已经为您完成此操作。只需将它的窥视高度设置为0,它应该已经听到了滑动手势。
但是,我不肯定它会以0的峰值高度工作。因此,如果这不起作用,只需将20dp的峰值高度设置为使底部纸张布局的顶部透明,以使其不可见。
除非我误解了你的问题,否则这应该是你的伎俩。如果您的目标是只需点击底部并向上滑动就可以显示应该非常直接的底页。
您可能遇到的一个可能问题是,由于按钮已经消耗了底部工作表,因此底部工作表没有收到触摸事件。如果发生这种情况,您将需要为整个屏幕创建一个触摸处理程序并返回每次处理它的“true”,然后将触摸事件简单地转发到底层视图,这样当您达到底部选项卡的阈值时您开始将触摸事件发送到底部工作表布局而不是标签栏。
听起来比现在更难。大多数课程都有onTouch,你只需要转发它。但是,只有走这条路线,如果它不能像我在前两个场景中描述的那样开箱即用。
最后,另一个可能有用的选项是创建tab按钮作为bottomSheetLayout的一部分,并使peek高度等同于标签栏。然后确保标签栏被限制在底部父底部,这样当您向上滑动时它只是停留在底部。这将使您能够单击按钮或获得免费的底部表单行为。
快乐的编码!