Coil图片加载库的使用介绍
.
Coil官方介绍
Coil 是一个 Android 图片加载库,通过
Kotlin
协程的方式加载图片。Coil 名字的由来:取 Coroutine Image Loader 首字母得来。
.
特点如下:
- 更快:
Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用
bitmap
,自动暂停和取消图片网络请求等。
- 更轻量级:
Coil 只有
2000个方法
(前提是你的 APP 里面集成了OkHttp
和Coroutines
),Coil 和Picasso
的方法数差不多,相比Glide
和Fresco
要轻量很多。
- 更容易使用:
Coil 的
API
充分利用了Kotlin
语言的新特性,简化和减少了很多样板代码。
- 更流行:
Coil 首选
Kotlin
语言开发并且使用包含Coroutines
,OkHttp
,Okio
和AndroidX Lifecycles
在内最流行的开源库。
.
Coil各个组件的作用
io.coil-kt:coil-base
: 基础组件,提供了基本的图片请求、图片解码、图片缓存、Bitmap 复用等功能
io.coil-kt:coil
: 默认组件,依赖于io.coil-kt:coil-base
,提供了 Coil 类的单例对象以及ImageView
相关的扩展函数
io.coil-kt:coil-gif
: 包含两个decoder
用于支持解码GIFs
io.coil-kt:coil-svg
: 包含一个decoder
用于支持解码 SVG
io.coil-kt:coil-video
: 包含两个fetchers
用于支持读取和解码 任何 Android 的支持的视频格式 的视频帧
.
.
Coil的使用介绍
.
在项目build.gradle
文件中添加依赖
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
//核心库
implementation("io.coil-kt:coil:1.2.2")
//选择添加
implementation("io.coil-kt:coil-gif:1.2.2")//支持GIF
implementation("io.coil-kt:coil-svg:1.2.2")//支持SVG
implementation("io.coil-kt:coil-video:1.2.2")//支持Video
}
.
.
Coil的基础使用
//加载网络图片
imageView.load("https://www.example.com/image.jpg")
//加载本地资源图片
imageView.load(R.drawable.image)
//加载文件里的图片
imageView.load(File("/path/to/image.jpg"))
使用可选的 `lambda` 块来添加配置项
imageView.load("https://www.example.com/image.jpg") {
crossfade(true) //淡入淡出
crossfade(1000)//设置显示动画的时间
placeholder(R.drawable.image) //占位图
error(R.drawable.image2)//图片加载失败时显示的图
}
.
Coil加载Gif图片
注: 需要添加
implementation("io.coil-kt:coil-gif:1.2.2")
依赖
val gifImageLoader = ImageLoader(this) {
componentRegistry {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
add(ImageDecoderDecoder())
} else {
add(GifDecoder())
}
}
}
image.load(url, gifImageLoader)
.
Coil加载SVG图
注: 需要添加
implementation("io.coil-kt:coil-svg:1.2.2")
依赖
val svgImageLoader = ImageLoader(this){
componentRegistry {
add(SvgDecoder(this@MainActivity))
}
}
image.load(R.drawable.image_svg, svgImageLoader)
.
Coil加载频帧
注: 需要添加
implementation("io.coil-kt:coil-video:1.2.2")
依赖
val imageLoader = ImageLoader.Builder(context)
.componentRegistry {
add(VideoFrameFileFetcher())
add(VideoFrameUriFetcher())
}
.build()
imageView.load(File("/path/to/video.mp4",imageLoader)) {
videoFrameMillis(1000)
}
.
.
ImageLoader(图片加载管理器)
作用: 负责处理图片缓存、数据获取、图像解码、请求管理、
Bitmap
缓存池、内存管理等工作
val imageLoader =