有没有人可以在 LazyColumnFor 中找到等效的 onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy),谢谢
问问题
598 次
3 回答
1
您可以通过将onGloballyPositioned
https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/OnGloballyPositionedModifier选项添加到第一项的修饰符来获取第一项的位置。
它返回:
- 布局创建后的初始位置
- 每次滚动事件期间更新的位置
LayoutCoordinates
lambda 里面的对象让你得到:
positionInParent()
positionInRoot()
positionInWindow()
要从LazyColumn
/获取 x 或 y,LazyRow
您可以使用这部分代码:
val initialLayoutY: MutableState<Float?> = rememberSaveable { mutableStateOf(null) }
Text(
text = "Lorem",
modifier = Modifier.onGloballyPositioned { layoutCoordinates ->
if (initialLayoutY.value == null) {
initialLayoutY.value = layoutCoordinates.positionInRoot().y
}
val currentTextLayoutY: Float = layoutCoordinates.positionInRoot().y
val currentLazyListY: Float = initialLayoutY.value!! - currentTextLayoutY
Log.e("Lazy Column y", currentLazyListY.toString())
}
)
不幸的是,它在快速滚动期间跳过了很多值。这是一个结果:
于 2021-10-16T20:52:56.943 回答
0
1.0.0-alpha12
应该是你想要的:
val scrollCallback = object : ScrollCallback {
override fun onCancel() {
super.onCancel()
}
override fun onScroll(scrollDistance: Float): Float {
return super.onScroll(scrollDistance)
}
override fun onStart(downPosition: Offset) {
super.onStart(downPosition)
}
override fun onStop(velocity: Float) {
super.onStop(velocity)
}
}
LazyColumnFor(
modifier = Modifier.scrollGestureFilter(scrollCallback, Orientation.Vertical),
items = listOf("")
) { item ->
}
于 2020-12-16T07:11:15.387 回答
0
不完全是onScrolled
。
1.0.0-beta02
您可以使用它来LazyListState#isScrollInProgress
检查列表当前是否通过手势、滑动或编程方式滚动。
val itemsList = (0..55).toList()
val state = rememberLazyListState()
if (state.isScrollInProgress){
//....
}
LazyColumn(state = state) {
items(itemsList) {
Text(".....")
}
}
于 2021-03-19T20:47:49.560 回答