为子Compose禁用嵌套滚动



我有一个可滚动列,里面有另一个可滚动列,和一个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)

最新更新