Вот пример, как это работает в 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
Реализация заказа изменения (перетаскивание) с анимацией для предметов (карт) в Lazycolumn, аналогично Applewallet? ⇐ Android
Форум для тех, кто программирует под Android
1738669274
Гость
Вот пример, как это работает в 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(),
Подробнее здесь: [url]https://stackoverflow.com/questions/79411557/implementing-change-order-drag-and-drop-with-animations-for-items-cards-in-l[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия