如何检索 LazyRow 的滚动方向
How to retrieve the scrolling direction for LazyRow
对于 LazyRow
或 Column
,我如何知道用户是向左滚动还是向右滚动(或向上滚动或...您知道)。我们不需要为这样的东西编写回调,因为 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。
对于 LazyRow
或 Column
,我如何知道用户是向左滚动还是向右滚动(或向上滚动或...您知道)。我们不需要为这样的东西编写回调,因为 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。