android - LazyColumnFor 中的 OnScrolled (Jetpack Compose)

标签 android android-jetpack-compose android-jetpack-compose-list

有人在 LazyColumnFor 中找到了 onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) 的等效项吗?

最佳答案

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

它返回:

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

lambda 内的 LayoutCooperatives 对象可让您获得:

  • positionInParent()
  • positionInRoot()
  • positionInWindow()

要从 LazyColumn/LazyRow 获取 x 或 y,您可以使用这部分代码:

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

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

Result from onGloballyPositioned function

关于android - LazyColumnFor 中的 OnScrolled (Jetpack Compose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65276066/

相关文章:

java - 如何从嵌套在多个子节点中的 Firebase 调用数据?

android - 如何获取安卓手机的电话号码?

android - 单击项目时如何检查ListView的CheckBox?

android - 尝试使用 Android material3 时出现 Unresolved reference 错误

android - Jetpack Compose - 如何获取 LazyVerticalGrid 项目行索引?

android - 在 Sqlite 和 MySQL 中使用相同的数据库记录

android - 将 URL 作为参数传递给 Jetpack Compose Navigation

android - 在传统的 android ViewPager 中滚动 LazyRow 的问题

android - 如何使用 Jetpack Compose 创建 GridView

android - Jetpack 撰写 : Explain to me why the list content is not updated?