#android #android-jetpack-compose #android-jetpack-compose-list
#Android #android-jetpack-compose #android-jetpack-compose-list
Вопрос:
Кто-нибудь нашел эквивалент onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy)
in LazyColumnFor
?
Ответ №1:
Вы можете получить позицию первого элемента, добавив onGloballyPositioned
https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/OnGloballyPositionedModifier опция к модификатору первого элемента.
Он возвращает:
- начальная позиция после создания макета
- обновляемая позиция каждый раз во время события прокрутки
LayoutCoordinates
Объект внутри лямбда-выражения позволяет получить:
positionInParent()
positionInRoot()
positionInWindow()
Чтобы получить x или y из LazyColumn
/ 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())
}
)
К сожалению, он пропускает много значений при быстрой прокрутке. Вот результат:
Ответ №2:
Это не совсем onScrolled
так .
С 1.0.0-beta02
помощью этого вы можете LazyListState#isScrollInProgress
проверить, выполняется ли в данный момент прокрутка списка жестом, щелчком мыши или программно или нет.
val itemsList = (0..55).toList()
val state = rememberLazyListState()
if (state.isScrollInProgress){
//....
}
LazyColumn(state = state) {
items(itemsList) {
Text(".....")
}
}
Ответ №3:
с 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 ->
}
Комментарии:
1. Похоже, в какой-то момент это было удалено issuetracker.google.com/issues/175294473?pli=1