AndroidBottomSheet:我怎么知道用户是向上还是向下拖动底部?

Kan*_*ika 7 android bottom-sheet material-components material-components-android

我有一个底部的应用程序打开了屏幕高度的 90%。我如何知道用户是否正在向上/向下拖动底部表。我读到我们可以使用 onSlide() 但偏移值是 NaN 并且有时非常奇怪,所以它看起来有点不可靠。任何帮助表示赞赏。提前致谢。

j2e*_*nue 5

底单文档不起作用,但我想我想出了清除文档的方法:

隐藏状态为 -1.0,折叠状态为 0.0,展开状态为 1.0。

对我来说,我只看到它从 1 到 0,从 0 到 1。那是因为我没有隐藏状态,我的工作表总是以最高点显示。举个例子,如果你有一张永远不会被隐藏的工作表,你可以试试这个:

只需保留一个名为 oldOffSet 的属性变量,然后执行以下操作:

behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
    var oldOffSet = 0f
    override fun onSlide(bottomSheet: View, slideOffset: Float) {
    
        val inRangeExpanding = oldOffSet < slideOffset
        val inRangeCollapsing = oldOffSet > slideOffset
        oldOffSet = slideOffset
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 0

在bottomsheet中,我们可以使用BottomSheetBehavior访问它的行为,获取onStateChanged()中的所有状态。

final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                    behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                }
            }

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            }
        });
Run Code Online (Sandbox Code Playgroud)

BottomSheetBehavior.STATE_COLLAPSED

BottomSheetBehavior.STATE_EXPANDED