Метод animateScrollToItem
Метод animateScrollToItem класса
LazyListState
работает как
scrollToItem,
но сдвигает список с анимацией.
Метод suspend, его вызывают
внутри корутины.
Индекс пункта задают параметром index,
дополнительный сдвиг - scrollOffset.
Синтаксис
listState.animateScrollToItem(index = 5)
Параметры
| Параметр | Описание |
|---|---|
index |
Индекс пункта, к которому прокручивают. |
scrollOffset |
Смещение пункта от начала viewport в пикселях. |
Пример
Давайте плавно перейдём к последнему пункту по кнопке:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.rememberCoroutineScope
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val listState = rememberLazyListState()
val scope = rememberCoroutineScope()
val lines = List(25) { "abcde" } + listOf("12345")
Column {
Button(
onClick = {
scope.launch {
listState.animateScrollToItem(25)
}
},
) {
Text(text = "12345")
}
LazyColumn(state = listState) {
items(lines) { line ->
Text(text = line)
}
}
}
}
}
}
На экране список плавно доедет до строки "12345"
после нажатия кнопки.
Пример
Давайте прокрутим к середине списка при появлении экрана:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val listState = rememberLazyListState()
val lines = List(30) { if (it == 15) "12345" else "abcde" }
LaunchedEffect(Unit) {
listState.animateScrollToItem(15)
}
LazyColumn(state = listState) {
items(lines) { line ->
Text(text = line)
}
}
}
}
}
На экране при открытии анимация остановится
на строке "12345" в середине списка.
Смотрите также
-
метод
scrollToItem,
который прокручивает без анимации -
метод
animateScrollToItem,
аналог для сетки -
метод
animateScrollTo,
который анимирует обычную прокрутку Column -
функция
LazyColumn,
к которой привязан listState