Coil图片框架

Coil图片框架

Coil是最近接触kotlin项目后发现一个kotlin框架,配合项目中得协程和Okhttp3可以说完全是项目中得一个很好得零件,而且还不会有太多侵入性

Coil使用方法

ImageView.load(data Any)

使用方法就是这么简单,如果一个刚刚接触这个框架也随便用、也可以自己去通过apply去扩展自己修改图片

Coil源码分析

image.png

@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)方法 image.png 然后在Coil中newImageLoader()

image.png image.png 一般我们什么都不配置就使用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)
复制代码

第二种其实就是增加配置一些项,代码更直观一些

猜你喜欢

转载自juejin.im/post/6969068536069095432