Coil是Android平臺上又一個開源的圖片加載庫,儘管Android平臺已經有諸如Picasso,Glide以及Fresco等很是成熟且優秀的圖片加載庫了,但Coil最主要的特點就是融合了當下Android開發界最主流的技術和趨勢,採用Kotlin爲開發語言,將協程、OKHttp、OKIO和AndroidX做爲一等公民,以期打形成一個更加輕快、現代化的圖片加載庫。具體而言包含如下幾個方面:android
Mappers
, Fetchers
, 和 Decoders
三個類組成,能夠方便地用於自定義:擴展或覆蓋默認行爲,或增長對新的文件類型的支持。ClassLoader
,它是一個接口,能夠方便地編寫對應的實現類進行測試;而且Coil同時提供了單例和非單例對象來支持依賴注入。Coil目前支持其它圖片加載庫所包含的全部功能,除此以外它還有一個獨特的特性:動態採樣(Dynamic image sampling),簡而言之就是能夠在內存中只緩存了一個低質量的圖片而此時須要顯示同一個高質量的圖片時,Coil能夠先把低質量的圖片做爲 ImageView
的 placeHolder
並同時去磁盤緩存中讀取對應的高質量圖片最後以「漸進式」的方式替換並最終顯示到視圖中,例如最多見的從圖片列表到預覽大圖的場景。
以上就是Coil目前的大體介紹,下面咱們對Coil的API進行一個簡單的使用預覽和介紹。git
// 加載一個基本的url(利用了擴展函數,對target無任何侵入)
imageView.load("https://www.website.com/image.jpg")
// Coil 支持加載 urls, uris, resources, drawables, bitmaps, files 等等
imageView.load(R.drawable.image)
imageView.load(File("/path/to/image.jpg"))
imageView.load(Uri.parse("content://com.android.externalstorage/image.jpg"))
// Requests的配置項能夠經過load的lambda參數方式實現
imageView.load("https://www.website.com/image.jpg") {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
// 自定義targets,包含開始、成功和失敗的回調
Coil.load(context, "https://www.website.com/image.jpg") {
target { drawable ->
// Handle the successful result.
}
}
// 經過使用掛起函數get來直接獲取圖片對象
val drawable = Coil.get("https://www.website.com/image.jpg")
複製代碼
看到這裏是否是以爲耳目一新,已經火燒眉毛地想開始學習和使用了,那就直接到Coil的GitHub地址瞭解更多吧:github.com/coil-kt/coi…github