自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android進(jìn)階之Coil-為kotlin而生的圖片庫詳解

移動(dòng)開發(fā) Android
Coil是Android上的一個(gè)全新的圖片加載框架,它的全名叫做coroutine image loader,即協(xié)程圖片加載庫。

[[427859]]

本文轉(zhuǎn)載自微信公眾號(hào)「Android開發(fā)編程」,作者Android開發(fā)編程。轉(zhuǎn)載本文請(qǐng)聯(lián)系A(chǔ)ndroid開發(fā)編程公眾號(hào)。

前言

Coil是Android上的一個(gè)全新的圖片加載框架,它的全名叫做coroutine image loader,即協(xié)程圖片加載庫;

與傳統(tǒng)的圖片加載庫Glide,Picasso或Fresco等相比。該具有輕量(只有大約1500個(gè)方法)、快、易于使用、更現(xiàn)代的API等優(yōu)勢(shì);

它支持GIF和SVG,并且可以執(zhí)行四個(gè)默認(rèn)轉(zhuǎn)換:模糊,圓形裁剪,灰度和圓角。并且是全用Kotlin編寫,如果你是純Kotlin項(xiàng)目的話,那么這個(gè)庫應(yīng)該是你的首選;

一、Coil介紹和使用

1、Coil介紹

Coil 是一個(gè) Android 圖片加載庫,通過 Kotlin 協(xié)程的方式加載圖片。特點(diǎn)如下:

  • 更快: Coil 在性能上有很多優(yōu)化,包括內(nèi)存緩存和磁盤緩存,把縮略圖存保存在內(nèi)存中,循環(huán)利用 bitmap,自動(dòng)暫停和取消圖片網(wǎng)絡(luò)請(qǐng)求等;
  • 更輕量級(jí):Coil 只有2000個(gè)方法(前提是你的 APP 里面集成了 OkHttp 和 Coroutines),Coil 和 Picasso 的方法數(shù)差不多,相比 Glide 和 Fresco 要輕量很多;
  • 更容易使用: Coil 的 API 充分利用了 Kotlin 語言的新特性,簡(jiǎn)化和減少了很多樣板代碼;
  • 更流行: Coil 首選 Kotlin 語言開發(fā)并且使用包含 Coroutines, OkHttp, Okio 和 AndroidX Lifecycles 在內(nèi)最流行的開源庫;

2、使用

①Coil 可以在 mavenCentral() 下載

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

②可以使用 ImageView 的擴(kuò)展函數(shù) 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 語法輕松配置請(qǐng)求選項(xiàng):

  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預(yù)置展位圖

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

crossfade的動(dòng)畫時(shí)間

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

③transformations

Coil默認(rèn)提供了四種變換:模糊變換(BlurTransformation)、圓形變換(CircleCropTransformation)、灰度變換(GrayscaleTransformation)和圓角變換(RoundedCornersTransformation)

基礎(chǔ)用法:

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

直接加入變換就可以, 同時(shí)可支持多種變換:

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

④Gif加載

Coil基礎(chǔ)包中是不支持Gif加載的,需要添加extend包:

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

此時(shí)需要更改一下代碼的方式,在imageLoader中注冊(cè)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也可以進(jìn)行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) 

總結(jié)

Coil可以配合Kotlin協(xié)程實(shí)現(xiàn)圖片加載:

  • 加載性能好:緩存管理(MemCache、DiskCache)、動(dòng)態(tài)采樣(Dynamic image sampling)、加載中暫停/終止等功能有助于提高圖片加載效率
  • 體積小:其包體積與Picasso相當(dāng),顯著低于Glide和Fresco,僅僅只有1500個(gè)方法,但是在功能上卻不輸于其他同類庫;
  • 簡(jiǎn)單易用:配合Kotlin擴(kuò)展方法等語法優(yōu)勢(shì),API簡(jiǎn)單易用;
  • 技術(shù)先進(jìn):基于Coroutine、OkHttp、Okio、AndroidX等先端技術(shù)開發(fā),確保了技術(shù)上的先進(jìn)性;

 

責(zé)任編輯:武曉燕 來源: Android開發(fā)編程
相關(guān)推薦

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原理

2024-08-13 15:26:44

2021-09-01 06:48:16

AndroidGlide緩存

2021-10-03 15:08:32

Android

2021-08-10 20:41:33

AndroidApp流程

2021-07-05 09:00:00

云原生數(shù)據(jù)庫開發(fā)

2021-09-02 07:00:01

Glide流程Android

2021-08-07 07:21:26

AndroidKotlinLambda

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場(chǎng)景

2009-12-04 10:14:03

Chrome OS上網(wǎng)本

2012-05-02 14:46:42

Win7

2021-09-03 07:27:38

AndroidGlide管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)