Md *_*din 6 android android-jetpack-compose
我正在使用accompanist-coil:0.12.0. 我想从一个 url 加载图像,然后将 drawable 传递给一个方法。我正在使用这个:
val painter = rememberCoilPainter(
request = ImageRequest.Builder(LocalContext.current)
.data(imageUrl)
.target {
viewModel.calcDominantColor(it) { color ->
dominantColor = color
}
}
.build(),
fadeIn = true
)
Run Code Online (Sandbox Code Playgroud)
然后通过画家Image这样:
Image(
painter = painter,
contentDescription = "Some Image",
)
Run Code Online (Sandbox Code Playgroud)
图像加载没有任何问题,但calcDominantColor从未调用该方法。
我做错了吗?
更新:
我能够在 requestBuilder 中使用 Transformation 调用该方法,但我不确定,是否应该这样做,因为我实际上并没有转换Bitmap本身:
val painter = rememberCoilPainter(
request = entry.imageUrl,
requestBuilder = {
transformations(
object: Transformation{
override fun key(): String {
return entry.imageUrl
}
override suspend fun transform(
pool: BitmapPool,
input: Bitmap,
size: Size
): Bitmap {
viewModel.calcDominantColor(input) { color ->
dominantColor = color
}
return input
}
}
)
}
)
Run Code Online (Sandbox Code Playgroud)
这第一次工作正常,但是当可组合重新组合时,转换从缓存返回并且我的方法不运行。
您可以使用onSuccess回调来获取可绘制对象:
AsyncImage(
model = url,
contentDescription = null,
onSuccess = { success ->
val drawable = success.result.drawable
}
)
Run Code Online (Sandbox Code Playgroud)
您也可以对rememberAsyncImagePainter.
LaunchedEffect我认为您想与 an 一起使用来ImageLoader从加载器结果访问位图。
val context = LocalContext.current
val imageLoader = ImageLoader(context)
val request = ImageRequest.Builder(context)
.transformations(RoundedCornersTransformation(12.dp.value))
.data(imageUrl)
.build()
val imagePainter = rememberCoilPainter(
request = request,
imageLoader = imageLoader
)
LaunchedEffect(key1 = imagePainter) {
launch {
val result = (imageLoader.execute(request) as SuccessResult).drawable
val bitmap = (result as BitmapDrawable).bitmap
val vibrant = Palette.from(bitmap)
.generate()
.getVibrantColor(defaultColor)
// do something with vibrant color
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |