我希望LazyColumn
高度与项目完全相同,同时仍通过 为它们设置动画.animateItem()
。使用下面的代码,它看起来不错,但它的使用.fillMaxHeight()
不符合我的用例。
.fillMaxHeight()
从结果中删除LazyColumn
那些不稳定的高度变化。我想知道是否有办法解决这个问题?
在视频中看得有点困难,最好以 60 FPS 的速度观看,但基本上,问题在于高度动画不流畅,并且最后一个项目在动画过程中被切断。我总是希望所有项目都可见,不会被切断,即使是部分。
这里“a”被隐藏了。“c”是不可见的
这里“b”被隐藏了。“c”是不可见的。
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.singleWindowApplication
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
fun main() = singleWindowApplication {
data class Item(val text: String, val id: Int)
var list by remember { mutableStateOf(listOf(Item("a", 1), Item("b", 2), Item("c", 3))) }
Box(modifier = Modifier.fillMaxSize()) {
Row(
modifier = Modifier
.background(Color.DarkGray)
.fillMaxSize()
.clickable {
println("clicked")
}
) {
}
Row(
horizontalArrangement = Arrangement.End, modifier = Modifier
.fillMaxWidth()
) {
LazyColumn(
modifier = Modifier
.background(Color.LightGray)
.fillMaxHeight()
.width(300.dp)
) {
items(list, { it.id }) {
Column(modifier = Modifier.animateItem()) {
Text(it.text,
color = Color.White,
modifier = Modifier
.padding(10.dp)
.fillMaxWidth()
.background(Color.Red)
.padding(10.dp)
.clickable {
println("clicked text")
})
}
}
}
}
}
LaunchedEffect(Unit) {
launch {
while (true) {
delay(1000)
list = list.toMutableList().drop(1)
if (list.isEmpty()) {
delay(1000)
list = listOf(Item("a", 1), Item("b", 2), Item("c", 3))
}
}
}
}
}