如何检索 LazyRow 的滚动方向

How to retrieve the scrolling direction for LazyRow

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

知道了

{ //Composable Scope
val lazyRowState = rememberLazyListState()
    val pOffset = remember { lazyRowState.firstVisibleItemScrollOffset }
    val direc = lazyRowState.firstVisibleItemScrollOffset - pOffset
    val scrollingRight /*or Down*/ = direc > 0 // Tad'aa
}

目前 (1.0.x) 没有内置函数可以从 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
}

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

此代码段用于 google codelab