今天,我们将向您展示如何使用JetPack组合中的Coil将图像URL转换为位图。但是在进行前进之前,我想请您遵循我的帐户,以获取有关Android和其他技术相关主题的最新更新。
什么是线圈?
由Kotlin Coroutines支持的Android的图像加载库。线圈是:
- - 快速:线圈执行许多优化,包括内存和磁盘缓存,在内存中删除图像,自动暂停/取消请求等等。
- - 轻量级:线圈向您的APK添加〜2000方法(对于已经使用Okhttp和Coroutines的应用程序),它与毕加索相当,并且比Glide和Fresco少得多。 。
- - 易于使用:COIL的API利用Kotlin的语言功能来简化和最小的样板。
- - Modern :线圈是Kotlin-First,使用现代图书馆,包括Coroutines,Okhttp,Okio和Androidx Lifecycles。
执行:
我已经在JetPack组成的情况下做了这个示例,但是我们也可以在没有JetPack组成的情况下这样做。让我们创建一个活动:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
JetpackComposeUtilsTheme {
val scope = rememberCoroutineScope()
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
urlToBitmap(
scope = scope,
imageURL = "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_960_720.jpg",
context = LocalContext.current,
onSuccess = {
it
},
onError = {
it
}
)
}
}
}
}
}
我们创建了一种方法,即:urltobitmap,它采用了一些参数,例如coroutine范围,图像URL和上下文。在成功和错误的情况下,它还给予回调。
我们正在使用rememcoroutinescope()使CoroutinesCope实例传递我们的函数以使用dispatcher.io。
加载图像数据。
fun urlToBitmap(
scope: CoroutineScope,
imageURL: String,
context: Context,
onSuccess: (bitmap: Bitmap) -> Unit,
onError: (error: Throwable) -> Unit
) {
var bitmap: Bitmap? = null
val loadBitmap = scope.launch(Dispatchers.IO) {
val loader = ImageLoader(context)
val request = ImageRequest.Builder(context)
.data(imageURL)
.allowHardware(false)
.build()
val result = loader.execute(request)
if (result is SuccessResult) {
bitmap = (result.drawable as BitmapDrawable).bitmap
} else if (result is ErrorResult) {
cancel(result.throwable.localizedMessage ?: "ErrorResult", result.throwable)
}
}
loadBitmap.invokeOnCompletion { throwable ->
bitmap?.let {
onSuccess(it)
} ?: throwable?.let {
onError(it)
} ?: onError(Throwable("Undefined Error"))
}
}
我们将图像加载到Coroutine范围内,并在其完成情况下进行回调。我们在错误的情况下取消了Coroutine作业,并将错误消息传递给Coroutine cancel()函数。
Coroutine作业完成后,我们得到了InvokeonCompletion的回调。我们检查了位图对象是否为null,如果不是null,则我们调用onSuccess,否则我们将调用OnError。
项目github链接:https://github.com/arsalankhan994/jetpack-compose-utils
现在。我将在即将发表的文章中介绍有关Android,Java,Kotlin和Springboot的更多主题。如果您喜欢这篇文章,请尽可能拍手。
如果您错过了:ðä
- https://towardsdev.com/parallel-multiple-api-calls-or-network-calls-using-kotlin-coroutines-40cb5f313171
- https://erselankhan.medium.com/communication-between-modules-in-android-erselan-khan-2c2ae5684024
- https://medium.com/bazaar-tech/dynamically-update-refresh-reload-viewpager2-fragments-588fcbd6f859
通过与您的其他开发人员分享这篇文章,并遵循我的媒介帐户 -
,向您展示您的爱。(关注我以获取有关Android,Kotlin和其他技术的更多内容。如果您有任何疑问,请继续问我在这里或通过电子邮件发送给arsalankhan994@gmail.com,我会尽力回应。)