Android 图片加载框架 Coil 的详细使用总结

Coil是一个Android图片加载库,通过Kotlin协程的方式加载图片。特点如下:

更快:Coil在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用bitmap,自动暂停和取消图片网络请求等。更轻量级:Coil只有2000个方法(前提是你的APP里面集成了OkHttp和Coroutines),Coil和Picasso的方法数差不多,相比Glide和Fresco要轻量很多。更容易使用:Coil的API充分利用了Kotlin语言的新特性,简化和减少了很多样板代码。更流行:Coil首选Kotlin语言开发并且使用包含Coroutines,OkHttp,Okio和AndroidXLifecycles在内最流行的开源库。Coil名字的由来:取CoroutineImageLoader首字母得来。

github:https://github.com/coil-kt/coil

文档:https://coil-kt.github.io/coil/image_loaders/

添加依赖:

implementation(“io.coil-kt:coil:1.4.0”)

简单使用

//URL

imageView.load(“https://www.example.com/image.jpg”)

//Resource

imageView.load(R.drawable.image)

//File

imageView.load(File(“/path/to/image.jpg”))

//Andmore…

可以使用lambda语法轻松配置请求选项:

imageView.load(“https://www.example.com/image.jpg”){

crossfade(true)//渐进进出

placeholder(R.drawable.image)//加载中占位图

transformations(CircleCropTransformation())//圆形图

error(R.drawable.image)//加载错误占位图

}

高斯模糊

//正常图片

mBinding.image1.load(imageUrl)

//高斯模糊-轻微模糊

mBinding.image11.load(imageUrl){

transformations(BlurTransformation(this@MainActivity,5f,10f))

scale(Scale.FILL)

}

//高斯模式-严重模糊

mBinding.image12.load(imageUrl){

transformations(BlurTransformation(this@MainActivity,20f,40f))

scale(Scale.FILL)

}

效果图:

图片[1]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

圆角

//没有圆角

mBinding.image1.load(imageUrl){

transformations(RoundedCornersTransformation())

scale(Scale.FILL)

}

//圆角一样

mBinding.image11.load(imageUrl){

transformations(RoundedCornersTransformation(20f))

scale(Scale.FILL)

}

//圆角不一样

mBinding.image12.load(imageUrl){

transformations(

RoundedCornersTransformation(

topLeft=20f,

topRight=20f,

bottomLeft=50f,

bottomRight=50f

)

)

scale(Scale.FILL)

}

效果图:

图片[2]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

圆形

布局文件

<ImageView

android:id=”@+id/image1″

android:layout_gravity=”center”

android:layout_width=”150dp”

android:layout_height=”150dp”/>

代码:

mBinding.image1.load(imageUrl){

transformations(CircleCropTransformation())

scale(Scale.FILL)

}

效果图:

图片[3]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

灰色变换GrayscaleTransformation

简单来说就是把彩色图变成灰色的

mBinding.image1.load(imageUrl){

transformations(GrayscaleTransformation())

}

效果图:

图片[4]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

Gif

添加依赖

implementation(“io.coil-kt:coil-gif:1.4.0”)

官方文档:https://coil-kt.github.io/coil/gifs/

创建gifImageLoader实例

valimageLoader=ImageLoader.Builder(context)

.componentRegistry{

if(SDK_INT>=28){

add(ImageDecoderDecoder(context))

}else{

add(GifDecoder())

}

}

.build()

//设置全局唯一实例

Coil.setImageLoader(imageLoader)

加载gif图片:

mBinding.image1.load(gifUrl)

效果图如下:

图片[5]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

监听下载过程

mBinding.image1.load(imageUrl){

listener(

onStart={request->

Log.d(“coil-“,”onStart”)

},

onError={request,throwable->

Log.d(“coil-“,”onError”)

},

onCancel={request->

Log.d(“coil-“,”onCancel”)

},

onSuccess={request,metadata->

Log.d(“coil-“,”onSuccess”)

}

)

}

取消下载

valimageUrl=”https://t7.baidu.com/it/u=433422559,1779762296&fm=193&f=GIF”

valdisposable=mBinding.image1.load(imageUrl)

//取消加载

disposable.dispose()

替换okhttp实例

coil底层是使用okhttp作为网络请求工具,可以设置okHttpClient实例

valokHttpClient=OkHttpClient.Builder()

.cache(CoilUtils.createDefaultCache(this))

.build()

valimageLoader=ImageLoader.Builder(this).okHttpClient{

okHttpClient

}.build()

Coil.setImageLoader(imageLoader)

自定义

valokHttpClient=OkHttpClient.Builder()

.cache(CoilUtils.createDefaultCache(this))

.build()

valimageLoader=ImageLoader.Builder(this)

.availableMemoryPercentage(0.2)

.diskCachePolicy(CachePolicy.ENABLED)//磁盘缓策略ENABLED、READ_ONLY、WRITE_ONLY、DISABLED

.crossfade(true)//淡入淡出

.crossfade(1000)//淡入淡出时间

.okHttpClient{//设置okhttpClient实例

okHttpClient

}.build()

Coil.setImageLoader(imageLoader)

availableMemoryPercentage设置用于此ImageLoader的内存缓存和位图池的可用内存百分比,范围:0-1,如果为0,则禁用内存缓存。

默认行为:

图片[6]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

memoryCachePolicy内存缓存策略,有4中策略,默认为CachePolicy.ENABLED

图片[7]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

diskCachePolicy磁盘缓存策略,方式和内存策略一直

crossfade开启淡入淡出

Coil源码分析

Coil是一个单例类

图片[8]-Android 图片加载框架 Coil 的详细使用总结-日志论坛-频道-三零软件

请登录后发表评论

    没有回复内容

  • 波浪
  • 波浪
  • 波浪
  • 波浪