Вот пример, как это работает в Applewallet: https://www.youtube.com/shorts/x-vcgg-wbckобразно Карта плавно движется вниз, а затем вверх < /p>
Поэтому я сделал пример примера Compose JetPack (полный код) с этой перезапорядой библиотекой (отредактировал пару строк кода), но на данный момент она использует модификатор по умолчанию по умолчанию .AnimateItem () Анимация для элементов:
private val CARD_HEIGHT = 500.dp
@Composable
fun ScreenContent(modifier: Modifier = Modifier) {
var items by remember { mutableStateOf((0..5).map { getRandomColor() }) }
val lazyListState = rememberLazyListState()
val cardPctHeight = 0.1f
val cardLastPctHeight = 0.5f
// https://github.com/Calvin-LL/Reorderable
val reorderableLazyListState = rememberReorderableLazyListState(
lazyListState = lazyListState,
shouldItemMoveThreshold = (CARD_HEIGHT * cardPctHeight) / 2f
) { from, to ->
items = items.toMutableList().apply {
add(to.index, removeAt(from.index))
}
}
LazyColumn(
state = lazyListState,
modifier = modifier.fillMaxSize(),
contentPadding = PaddingValues(top = 10.dp),
verticalArrangement = Arrangement.Bottom
) {
itemsIndexed(
items = items,
key = { _, item -> item.toArgb() }
) { index, item ->
ReorderableItem(reorderableLazyListState, key = item.toArgb()) {
Box(
modifier = Modifier
.padding(horizontal = 10.dp)
.draggableHandle()
.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val placeableHeight = if (index != items.lastIndex) {
placeable.height * cardPctHeight
} else {
placeable.height * cardLastPctHeight
}
layout(placeable.width, placeableHeight.roundToInt()) {
placeable.place(0, 0)
}
}
.fillMaxWidth()
.clip(RoundedCornerShape(12.dp))
.height(CARD_HEIGHT)
.background(color = item)
) {
//
}
}
}
}
}
private fun getRandomColor(): Color {
return Color(
red = Random.nextFloat(),
green = Random.nextFloat(),
blue = Random.nextFloat(),
alpha = 1f
)
}
Прямо сейчас он работает так с анимацией по умолчанию:
https://youtube.com/shorts/gmdc6aclgrg
Эта переупорядоченная библиотека указывает анимацию по умолчанию здесь < /p>
@Composable
fun LazyItemScope.ReorderableItem(
...
animateItemModifier: Modifier = Modifier.animateItem(),
Подробнее здесь: https://stackoverflow.com/questions/794 ... cards-in-l