如何检索 LazyRow 的滚动方向

Ric*_*per 13 android android-jetpack-compose android-jetpack-compose-list

对于LazyRow, 或Column,如何知道用户是否向左或向右滚动(或向上或......你知道)。对于类似的东西,我们不需要在 compose 中回调,因为mutableStateOf对象总是会触发重组,所以我只是想知道一种将其存储在变量中的方法。好的,有lazyRowState.firstVisibleItemScrollOffset,它可以用来以某种方式测量它,但我找不到一种方法来首先存储它的值,然后减去当前值来检索方向(基于正或负变化)。关于如何做到这一点的任何想法,谢谢

Gab*_*tti 33

目前没有内置函数可以从中获取此信息LazyListState

你可以使用类似的东西:

@Composable
private fun LazyListState.isScrollingUp(): Boolean {
    var previousIndex by remember(this) { mutableStateOf(firstVisibleItemIndex) }
    var previousScrollOffset by remember(this) { mutableStateOf(firstVisibleItemScrollOffset) }
    return remember(this) {
        derivedStateOf {
            if (previousIndex != firstVisibleItemIndex) {
                previousIndex > firstVisibleItemIndex
            } else {
                previousScrollOffset >= firstVisibleItemScrollOffset
            }.also {
                previousIndex = firstVisibleItemIndex
                previousScrollOffset = firstVisibleItemScrollOffset
            }
        }
    }.value
}
Run Code Online (Sandbox Code Playgroud)

然后只需使用即可listState.isScrollingUp()获取有关卷轴的信息。

此代码片段在 google codelab中使用。