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 МБ.

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