Jetpack Compose: процент прокрутки LazyRow?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Jetpack Compose: процент прокрутки LazyRow?

Сообщение Anonymous »

Я пытаюсь реализовать индикатор прокрутки в LazyRow. В идеале переход при прокрутке должен быть плавным, но я читал, что это невозможно, поскольку у нас есть доступ только к firstVisibleItemIndex из состояния. Но даже тогда мне не удалось реализовать это так, как я хочу, потому что мои элементы занимают только 90% ширины экрана, поэтому отображается небольшая часть предыдущего элемента. Когда выбран второй элемент, первый все еще виден на экране, поэтому firstVisibleItemIndex никогда не изменится, пока вы не прокрутите его немного дальше.
Есть ли способ плавно получить прокручиваемый процент? Если нет, то как я могу исправить свой случай, учитывая, что элементы не занимают общую ширину родителя:
Это то, что у меня есть до сих пор. Код адаптирован для сокрытия конфиденциальной информации, но это должно работать:

Код: Выделить всё

@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun SnappingRowWithIndicator(items: List) {
val state = rememberLazyListState()
val firstVisibleItemIndex = state.firstVisibleItemIndex
val percent = (firstVisibleItemIndex / (items.size).toFloat()) * 100f

LaunchedEffect(percent) {
val scrollText = "scroll: $percent"
println(scrollText)
}

LazyRow(
horizontalArrangement = Arrangement.spacedBy(16.dp),
state = state,
flingBehavior = rememberSnapFlingBehavior(lazyListState = state)
) {
items(items) { dto ->
Text(
modifier = Modifier
.height(32.dp)
.fillParentMaxWidth(0.9f)
.background(Color.White)
.padding(vertical = 8.dp),
color = Color.Black,
text = dto.toString(),
textAlign = TextAlign.Center
)
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp, alignment = Alignment.CenterHorizontally)
) {
items.forEachIndexed { index, _ ->
// todo color and not color the dots according to the index and the percentage scrolled
Box(modifier = Modifier
.size(8.dp)
.background(color = DesignSystem.Color.white, shape = CircleShape))
}
}
}
Как это выглядит с выбранным вторым элементом:
[img]https://i. sstatic.net/MxifnTpB.png[/img]


Подробнее здесь: https://stackoverflow.com/questions/785 ... percentage
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Jetpack Compose — общие состояния прокрутки с помощью lazyrow и столбцов
    Anonymous » » в форуме Android
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Отображение LazyRow ElevatedCards внизу карты GoogleMap в Jetpack Compose
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Jetpack Compose: вложенный LazyColumn/LazyRow
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский липкий заголовок Jetpack Compose LazyRow
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский липкий заголовок Jetpack Compose LazyRow
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»