Coil图片框架
Coil是最近接触kotlin项目后发现一个kotlin框架,配合项目中得协程和Okhttp3可以说完全是项目中得一个很好得零件,而且还不会有太多侵入性
Coil使用方法
ImageView.load(data Any)
使用方法就是这么简单,如果一个刚刚接触这个框架也随便用、也可以自己去通过apply去扩展自己修改图片
Coil源码分析
@JvmSynthetic
inline fun ImageView.loadAny(
data: Any?,
imageLoader: ImageLoader = context.imageLoader,
builder: ImageRequest.Builder.() -> Unit = {}
): Disposable {
val request = ImageRequest.Builder(context)
.data(data)
.target(this)
.apply(builder)
.build()
return imageLoader.enqueue(request)
}
复制代码
通过观察发现支持得load方法都会最后到loadAny方法中通过ImageRequest构造函数添加加载数据data,traget是哪个view加载,apply是否扩展,最后调用build方法获取imageRequest对象,通过imageLoader方法请求
imageRequest里面是一些配置信息
imageLoader通过Coil.imageLoader(this)方法
然后在Coil中newImageLoader()
一般我们什么都不配置就使用ImageLoader(context),然后在ImageLoader中调用伴生对象里面的build方法,创建imageLoader
然后在请求里面使用了大量的协程方法,有兴趣可以自己去读下
Coil扩展
mBinding.testCoilIv.load("url"){
crossfade(true) //淡入淡出
placeholder(R.drawable.tab_shop_selected) //占位图
transformations(CircleCropTransformation()) //图片变换,将图片转为圆形
}
复制代码
最简单使用方法
val listener: ImageRequest.Listener =
object : ImageRequest.Listener {
override fun onStart(imageRequest: ImageRequest) {
}
override fun onCancel(imageRequest: ImageRequest) {
}
override fun onError(
imageRequest: ImageRequest,
throwable: Throwable
) {
}
override fun onSuccess(
imageRequest: ImageRequest,
metadata: ImageResult.Metadata
) {
}
}
val request = ImageRequest.Builder(this)
.data("url")
.target {
mBinding.testCoilIv.setImageDrawable(it)
}
.listener(listener)
.build()
imageLoader.enqueue(request)
复制代码
第二种其实就是增加配置一些项,代码更直观一些
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END