OnScrolled в LazyColumnFor (составление Jetpack)
Кто-нибудь может найти эквивалент onScrolled (@NonNull RecyclerView recyclerView, int dx, int dy) в LazyColumnFor, спасибо
3 ответа
Вы можете получить позицию первого элемента, добавив
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())
}
)
К сожалению, при быстрой прокрутке пропускается много значений. Вот результат:
Это не совсем так <tcode id="22867114"></tcode>.
С
1.0.0-beta02
вы можете использовать <strong>
<tcode id="22867116"></tcode></strong> чтобы проверить, прокручивается ли список в данный момент жестом, щелчком или программно или нет.
val itemsList = (0..55).toList()
val state = rememberLazyListState()
if (state.isScrollInProgress){
//....
}
LazyColumn(state = state) {
items(itemsList) {
Text(".....")
}
}
Это должно быть то, что вы хотите:
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 ->
}