0

1.3.2在 Jetpack Compose 中使用线圈,我有一个Image这样的

Image(
    painter = rememberImagePainter(
        data = imageUrl,
        onExecute = { _, _ -> true },
        builder = {
            placeholder(R.drawable.icon)
        }
    ),
    contentScale = ContentScale.FillWidth,
    contentDescription = null,
    modifier = Modifier
        .fillMaxWidth()
        .aspectRatio(1f)
)

如何为占位符图标设置自定义颜色和大小?
我没有在文档中找到任何示例

4

2 回答 2

1

您可以使用painter.state来查看图像是否仍在加载,并使用Box来显示所需的占位符。请注意,Image要加载的必须在视图层次结构中,只是定义rememberImagePainter不会开始加载。

您可以使用其中一个ImageIcon作为占位符:如果您需要更改色调颜色,第二个选项似乎更清晰:

Box(contentAlignment = Alignment.Center) {
    val painter = rememberImagePainter(data = imageUrl)
    Image(
        painter = painter,
        contentScale = ContentScale.FillWidth,
        contentDescription = null,
        modifier = Modifier
            .fillMaxWidth()
            .aspectRatio(1f)
    )
    if (painter.state !is ImagePainter.State.Success) {
        Icon(
            painter = painterResource(id = R.drawable.icon),
            contentDescription = null,
            tint = Color.Blue,
            modifier = Modifier.size(100.dp)
        )
    }
}

我用于contentAlignment = Alignment.Center将静态大小占位符居中放置在 中Box,您也可以添加Modifier.matchParentSize()到占位符,使其与图像大小相同,用于fillMaxSize(part)占用part父空间等。

您也可以使用AnimatedVisibility而不是if添加动画。

于 2021-10-04T13:26:04.373 回答
0

AFAIK 你不能直接使用资源来做到这一点,但你可以使用不同placeholder的重载来获取Drawable对象。您可以尝试直接在该对象中执行您需要的操作

于 2021-10-04T12:15:10.707 回答