2

有没有人可以在 LazyColumnFor 中找到等效的 onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy),谢谢

4

3 回答 3

1

您可以通过将onGloballyPositioned https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/OnGloballyPositionedModifier选项添加到第一项的修饰符来获取第一项的位置。

它返回:

  • 布局创建后的初始位置
  • 每次滚动事件期间更新的位置

LayoutCoordinateslambda 里面的对象让你得到:

  • 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())
            }
        )

不幸的是,它在快速滚动期间跳过了很多值。这是一个结果:

onGloballyPositioned 函数的结果

于 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 回答