Android进阶之Coil-为kotlin而生的图片库详解

移动开发 Android
Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。

[[427859]]

本文转载自微信公众号「Android开发编程」,作者Android开发编程。转载本文请联系Android开发编程公众号。

前言

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库;

与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势;

它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选;

一、Coil介绍和使用

1、Coil介绍

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

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

2、使用

①Coil 可以在 mavenCentral() 下载

  1. implementation("io.coil-kt:coil:1.2.1"

②可以使用 ImageView 的扩展函数 load 加载一张图片:

  1. // URL 
  2. imageView.load("https://www.example.com/image.jpg"
  3. // Resource 
  4. imageView.load(R.drawable.image) 
  5. // File 
  6. imageView.load(File("/path/to/image.jpg")) 

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

  1. imageView.load("https://www.example.com/image.jpg") { 
  2.     crossfade(true
  3.     placeholder(R.drawable.image) 
  4.     transformations(CircleCropTransformation()) 

error

  1. imageView.load(url) { 
  2.         error(R.drawable.error) 
  3.     } 

placeholder预置展位图

  1. imageView.load(url) { 
  2.         placeholder(R.drawable.placeholder) 
  3.         crossfade(3000) 
  4.     } 

crossfade的动画时间

  1. imageView.load(url) { 
  2.         crossfade(3000) 
  3.     } 

③transformations

Coil默认提供了四种变换:模糊变换(BlurTransformation)、圆形变换(CircleCropTransformation)、灰度变换(GrayscaleTransformation)和圆角变换(RoundedCornersTransformation)

基础用法:

  1. imageView.load(IMAGE_URL){ 
  2.      transformations(GrayscaleTransformation()) 

直接加入变换就可以, 同时可支持多种变换:

  1. imageView.load(IMAGE_URL) { 
  2.             transformations(GrayscaleTransformation(), 
  3.                             RoundedCornersTransformation(topLeft = 2f, topRight =  
  4.             2f,bottomLeft = 40f, bottomRight = 40f)) 

④Gif加载

Coil基础包中是不支持Gif加载的,需要添加extend包:

  1. implementation("io.coil-kt:coil-gif:0.9.5"

此时需要更改一下代码的方式,在imageLoader中注册Gif组件:

  1. val gifImageLoader = ImageLoader(this) { 
  2.             componentRegistry { 
  3.                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { 
  4.                     add(ImageDecoderDecoder()) 
  5.                 } else { 
  6.                     add(GifDecoder()) 
  7.                 } 
  8.             } 

使用本组件之后,ImageView可直接使用:

  1. id_image_gif.load(GIF_IMAGE_URL, gifImageLoader) 

⑤SVG加载

Coil也可以进行SVG加载的,同gif一样,也是需要添加extend包的:

  1. implementation("io.coil-kt:coil-svg:0.9.5"

代码如下:

  1. val svgImageLoader = ImageLoader(this){ 
  2.             componentRegistry { 
  3.                 add(SvgDecoder(this@MainActivity)) 
  4.             } 
  5.         } 
  6. id_image_svg.load(R.drawable.ic_directions_bus_black_24dp, svgImageLoader) 

总结

Coil可以配合Kotlin协程实现图片加载:

  • 加载性能好:缓存管理(MemCache、DiskCache)、动态采样(Dynamic image sampling)、加载中暂停/终止等功能有助于提高图片加载效率
  • 体积小:其包体积与Picasso相当,显著低于Glide和Fresco,仅仅只有1500个方法,但是在功能上却不输于其他同类库;
  • 简单易用:配合Kotlin扩展方法等语法优势,API简单易用;
  • 技术先进:基于Coroutine、OkHttp、Okio、AndroidX等先端技术开发,确保了技术上的先进性;

 

责任编辑:武晓燕 来源: Android开发编程
相关推荐

2021-04-20 08:49:38

AndroidKotlinColi

2021-08-05 20:39:34

AndroidKotlinStandard.kt

2021-08-25 07:43:17

AndroidSurfaceViewTextureView

2021-09-07 06:40:25

AndroidLiveData原理

2021-10-03 15:08:32

Android

2021-09-01 06:48:16

AndroidGlide缓存

2021-08-10 20:41:33

AndroidApp流程

2021-07-05 09:00:00

云原生数据库开发

2021-08-07 07:21:26

AndroidKotlinLambda

2021-09-02 07:00:01

Glide流程Android

2021-08-17 13:41:11

AndroidView事件

2021-08-23 06:27:46

AndroidctivitysetContentV

2014-09-22 10:02:26

开源

2015-03-31 16:25:35

Cocos

2016-09-22 15:29:41

程序IT加班

2021-08-11 17:15:17

AndroidActivity场景

2012-05-02 14:46:42

Win7

2009-12-04 10:14:03

Chrome OS上网本

2014-04-10 09:49:38

System z关键业务
点赞
收藏

51CTO技术栈公众号