我使用 Coil
和 Compose
。
我正在尝试在图片加载时制作闪烁动画。
所有的例子都使用 ImagePainter
和 ImagePainter.State
,它们可以正常工作,但现在被标记为“弃用”。
这就是为什么我选择了 AsyncImagePainter
。没有状态检查它可以完美地工作,但添加状态检查后我得到了一个无限的闪烁动画。
我还尝试在 AsyncImagePainter
的 onSuccess 方法中使用 mutableState 改变 load state 变量,但动画仍然是无限的。
@Composable
fun FoodItem(food: Fun) {
Column (
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.Top
) {
val painter = rememberAsyncImagePainter(food.image.sm)
if (painter.state is AsyncImagePainter.State.Loading) {
AnimatedShimmer { ShimmerFoodItem(brush = it) }
} else {
Image(
modifier = Modifier
.fillMaxWidth()
.height(104.dp)
.clip(RoundedCornerShape(size = 8.dp)),
painter = painter,
contentScale = ContentScale.Crop,
contentDescription = "Food photo"
)
Text(
modifier = Modifier.padding(top = 4.dp),
text = food.title,
fontSize = MaterialTheme.typography.body1.fontSize,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
fontWeight = FontWeight.Bold
)
Text(
text = food.subtitle,
fontSize = MaterialTheme.typography.subtitle2.fontSize,
overflow = TextOverflow.Ellipsis,
maxLines = 2,
fontWeight = FontWeight.Normal
)
}
}
}