我有一个可滚动列,里面有另一个可滚动列,和一个MapView。
由于Compose的默认行为是允许嵌套滚动,这使得控制这两个也可以使用手势的子控件变得有些困难。
我想这样做,当这些子进程收到一个指针事件时,它们自己处理它,而不把任何东西传递给父进程。
没有未消耗的值之类的。只要指针事件在它们的边界内,它们就把它全部消耗掉。
我怎么才能做到呢?
我试着去看看NestedScrolling,但是它给了我们更多的控制,而不是孩子。
关于指针事件的一些搜索使我找到了一个解决方案,该解决方案禁用了孩子内部的所有手势。但是我想让孩子使用手势和使用它们,而不是处理。
您可以将Modifier.nestedScroll()
与自定义NestedScrollConnection
对象一起使用。
例如你可以禁用滚动儿童通过重写onPreScroll
override fun onPreScroll(available: Offset, source: NestedScrollSource) = available.copy(x = 0f)
或禁用父滚动:
override fun onPostScroll(
consumed: Offset,
available: Offset,
source: NestedScrollSource
) = available.copy(x = 0f)