对于LazyRow
, or Column
, 我如何知道用户是向左还是向右滚动(或向上或......你知道的)。对于这样的事情,我们不需要在 compose 中进行回调,因为mutableStateOf
对象总是会触发重新组合,所以我只想知道一种将它存储在变量中的方法。好的,所以有lazyRowState.firstVisibleItemScrollOffset
,它可以用来以某种方式测量它,但我找不到一种方法来先存储它的值,然后减去当前值以检索方向(基于正或负变化)。关于如何做到这一点的任何想法,谢谢
问问题
517 次
2 回答
3
目前 ( 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中使用。
于 2021-08-10T17:58:43.607 回答
2
知道了
{ //Composable Scope
val lazyRowState = rememberLazyListState()
val pOffset = remember { lazyRowState.firstVisibleItemScrollOffset }
val direc = lazyRowState.firstVisibleItemScrollOffset - pOffset
val scrollingRight /*or Down*/ = direc > 0 // Tad'aa
}
于 2021-08-10T13:42:15.953 回答