[英]How to set an image URL as error placeholder on Coil in Jetpack Compose
Coil accepts a drawable resource as an error placeholder. Coil 接受可绘制资源作为错误占位符。 Is there a way to use an image URL here instead?有没有办法在此处使用图像 URL?
Here is the code I am working on:这是我正在处理的代码:
// Global variables
var currentlySelectedImageUri = mutableStateOf<Uri?>(null)
var previousImageUri: Uri? = null
// @Composable fun() {...
Image(
painter = rememberImagePainter(
if (currentlySelectedImageUri.value != null) { // use the currently selected image
currentlySelectedImageUri.value
} else {
if (previousImageUri != null) { // use the previously selected image
previousImageUri
} else {
R.drawable.blank_profile_picture // use the placeholder image
}
}, builder = {
placeholder(R.drawable.blank_profile_picture)
error(R.drawable.blank_profile_picture) // FIXME: Set the previously selected image
}),
contentDescription = "profile image",
contentScale = ContentScale.Crop,
modifier = Modifier.fillMaxWidth()
)
You can check painter.state
value.您可以检查painter.state
值。
Initially it's ImagePainter.State.Empty
, while image is loading it's ImagePainter.State.Loading
, and if it failed - it becomes ImagePainter.State.Error
.最初它是ImagePainter.State.Empty
,而图像正在加载它是ImagePainter.State.Loading
,如果它失败 - 它变成ImagePainter.State.Error
。 At this point you can change coil url, as an example, using local remember variable:此时您可以更改线圈 url,例如,使用局部记忆变量:
val localImagePainterUrl = remember { mutableStateOf<Uri?>(null) }
val painter = rememberImagePainter(
data = localImagePainterUrl.value
?: currentlySelectedImageUri.value
?: previousImageUri
?: R.drawable.blank_profile_picture,
builder = {
placeholder(R.drawable.blank_profile_picture)
})
val isError = painter.state is ImagePainter.State.Error
LaunchedEffect(isError) {
if (isError) {
localImagePainterUrl.value = previousImageUri
}
}
Image(
painter = painter,
...
)
There is a function inside coil ImageRequest Builder class线圈 ImageRequest Builder 类里面有一个函数
fun placeholder(@DrawableRes drawableResId: Int) = apply {
this.placeholderResId = drawableResId
this.placeholderDrawable = null
}
Usage:用法:
Image(
painter = rememberImagePainter(
data = url,
builder = {
placeholder(R.drawable.your_placeholder_drawable) // or bitmap
}
)
)
UPDATE :更新:
Also use: com.google.accompanist.placeholder
也使用: com.google.accompanist.placeholder
Dependency gradle: com.google.accompanist:accompanist-placeholder:accompanist_version
依赖等级: com.google.accompanist:accompanist-placeholder:accompanist_version
// accompanist_version = 0.19.0
Modifier.placeholder(
visible = true/false,
color = color,
highlight = PlaceholderHighlight.shimmer(color),
shape = imageShape // RectangleShape)
实际上,有一种更简单的方法从线圈 compose api ,您可以将 error(R.drawable.your_placeholder_drawable) 添加到构建器中,就是这样
Image(painter = rememberImagePainter(data = url, builder = {error(R.drawable.your_placeholder_drawable)}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.