Jetpack Compose 上的可变 ImagePainter
Variable ImagePainter on Jetpack Compose
我正在使用 Jetpack Compose 1.0.0 开发一个 Android 应用程序,我正在尝试制作一个使用可空图像 URL 字符串的可组合项,如果它为空,则它将显示一个带有 painterResource
的占位符,如果它不为空,它将使用 rememberImagePainter
.
显示实际图像
我这样做的方式是:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = rememberCoilPainter(
null,
previewPlaceholder = R.drawable.ic_placeholder_user,
fadeIn = true,
)
LaunchedEffect(imageURL) {
painter.request = imageURL
}
Image(painter = painter, contentDescription = null)
}
不幸的是,rememberCoilPainter
已从伴奏线圈中弃用,现在建议使用 rememberImagePainter
。但是,ImagePainter.request
不能像上面那样改变。然后我尝试了以下代码:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = remember {
mutableStateOf<ImagePainter>(painterResource(id = R.drawable.ic_placeholder_user))
}
LaunchedEffect(imageURL) {
painter.value = rememberImagePainter(imageURL)
}
Image(painter = painter.value, contentDescription = null)
}
但这不起作用,因为 painterResource
和 rememberImagePainter
必须用在 @Composable
函数上。我怎样才能达到和以前一样的效果?
在 Coil 2.0.0 中,AsyncImage
和 rememberAsyncImagePainter
都有 placeholder
接受任何其他画家的参数:
AsyncImage(
model = imageURL,
placeholder = painterResource(R.drawable.placeholder),
contentDescription = null,
)
在 Coil 1.4.0 中,您可以像这样使用 builder
:
Image(
rememberImagePainter(
imageURL,
builder = {
placeholder(R.drawable.placeholder)
}
),
contentDescription = null,
)
我正在使用 Jetpack Compose 1.0.0 开发一个 Android 应用程序,我正在尝试制作一个使用可空图像 URL 字符串的可组合项,如果它为空,则它将显示一个带有 painterResource
的占位符,如果它不为空,它将使用 rememberImagePainter
.
我这样做的方式是:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = rememberCoilPainter(
null,
previewPlaceholder = R.drawable.ic_placeholder_user,
fadeIn = true,
)
LaunchedEffect(imageURL) {
painter.request = imageURL
}
Image(painter = painter, contentDescription = null)
}
不幸的是,rememberCoilPainter
已从伴奏线圈中弃用,现在建议使用 rememberImagePainter
。但是,ImagePainter.request
不能像上面那样改变。然后我尝试了以下代码:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = remember {
mutableStateOf<ImagePainter>(painterResource(id = R.drawable.ic_placeholder_user))
}
LaunchedEffect(imageURL) {
painter.value = rememberImagePainter(imageURL)
}
Image(painter = painter.value, contentDescription = null)
}
但这不起作用,因为 painterResource
和 rememberImagePainter
必须用在 @Composable
函数上。我怎样才能达到和以前一样的效果?
在 Coil 2.0.0 中,AsyncImage
和 rememberAsyncImagePainter
都有 placeholder
接受任何其他画家的参数:
AsyncImage(
model = imageURL,
placeholder = painterResource(R.drawable.placeholder),
contentDescription = null,
)
在 Coil 1.4.0 中,您可以像这样使用 builder
:
Image(
rememberImagePainter(
imageURL,
builder = {
placeholder(R.drawable.placeholder)
}
),
contentDescription = null,
)