Coil是Android平台上又一个开源的图片加载库,尽管Android平台已经有诸如Picasso,Glide以及Fresco等很是成熟且优秀的图片加载库了,但Coil最主要的特点就是融合了当下Android开发界最主流的技术和趋势,采用Kotlin为开发语言,将协程、OKHttp、OKIO和AndroidX做为一等公民,以期打形成一个更加轻快、现代化的图片加载库。具体而言包含如下几个方面:android
Mappers
, Fetchers
, 和 Decoders
三个类组成,能够方便地用于自定义:扩展或覆盖默认行为,或增长对新的文件类型的支持。ClassLoader
,它是一个接口,能够方便地编写对应的实现类进行测试;而且Coil同时提供了单例和非单例对象来支持依赖注入。Coil目前支持其它图片加载库所包含的全部功能,除此以外它还有一个独特的特性:动态采样(Dynamic image sampling),简而言之就是能够在内存中只缓存了一个低质量的图片而此时须要显示同一个高质量的图片时,Coil能够先把低质量的图片做为 ImageView
的 placeHolder
并同时去磁盘缓存中读取对应的高质量图片最后以“渐进式”的方式替换并最终显示到视图中,例如最多见的从图片列表到预览大图的场景。
以上就是Coil目前的大体介绍,下面咱们对Coil的API进行一个简单的使用预览和介绍。git
// 加载一个基本的url(利用了扩展函数,对target无任何侵入)
imageView.load("https://www.website.com/image.jpg")
// Coil 支持加载 urls, uris, resources, drawables, bitmaps, files 等等
imageView.load(R.drawable.image)
imageView.load(File("/path/to/image.jpg"))
imageView.load(Uri.parse("content://com.android.externalstorage/image.jpg"))
// Requests的配置项能够经过load的lambda参数方式实现
imageView.load("https://www.website.com/image.jpg") {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
// 自定义targets,包含开始、成功和失败的回调
Coil.load(context, "https://www.website.com/image.jpg") {
target { drawable ->
// Handle the successful result.
}
}
// 经过使用挂起函数get来直接获取图片对象
val drawable = Coil.get("https://www.website.com/image.jpg")
复制代码
看到这里是否是以为耳目一新,已经火烧眉毛地想开始学习和使用了,那就直接到Coil的GitHub地址了解更多吧:github.com/coil-kt/coi…github