我想为某些 space 滚动触发 OnScrollChangeListener

I want to trigger OnScrollChangeListener for certain space scrolled

我有一个 scrollView 需要在我拖动某个 Y 偏移量时隐藏键盘,目前它总是在我输入编辑文本时关闭我的键盘但是我想做的是执行 hideKeyboard() 例如视图已滚动 Y 单位

binding.scrollView.setOnScrollChangeListener { view, i, i2, i3, i4 ->
            hideKeyboard()
        }

我想添加这样的条件

binding.scrollView.setOnScrollChangeListener { view, i, i2, i3, i4 ->
            if(position_dragged_in_Y > some_value)
            hideKeyboard()
        }

我该怎么做?谢谢

设置OnScrollChanceListener时,我得到了以下属性:

    scrollview.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
    }

因此,OnScrollChangeListener 已经为我们提供了 scrollY 位置的当前位置。要设置条件(if scrollY >= someYPosition),您可以在滚动视图中添加一个不可见的视图,如下所示:

        <View
            android:id="@+id/myInvisibleViewForCondition"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

然后,为了获得我们 myInvisibleViewForCondition 的绝对 Y 位置,我们使用以下扩展函数:

fun View.getLocationOnScreen(): Point {
    val location = IntArray(2)
    this.getLocationOnScreen(location)
    return Point(location[0],location[1])
}

现在我们可以开始处理条件了:

    scrollview.setOnScrollChangeListener { _, _, scrollY, _, _ ->
        val absolutPositionOfInvisibleView = myInvisibleViewForCondition.getLocationOnScreen()
        val yPositionOfInvisibleView = absolutPositionOfInvisibleView.y
        if (scrollY > yPositionOfInvisibleView) {
            hideKeyboad()
        }
    }

我无法测试该功能,所以现在让我测试一下,如果可行的话。

干杯