android开发分享Android图片加载框架Coil的详细使用总结

简介coil 是一个 android 图片加载库,通过 kotlin 协程的方式加载图片。特点如下:更快: coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bi

上述就是android开发分享Android图片加载框架Coil的详细使用总结的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

简介

coil 是一个 android 图片加载库,通过 kotlin 协程的方式加载图片。特点如下:

  • 更快: coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等。
  • 更轻量级: coil 只有2000个方法(前提是你的 app 里面集成了 okhttp 和 coroutines),coil 和 picasso 的方法数差不多,相比 glide 和 fresco 要轻量很多。
  • 更容易使用: coil 的 api 充分利用了 kotlin 语言的新特性,简化和减少了很多样板代码。
  • 更流行: coil 首选 kotlin 语言开发并且使用包含 coroutines, okhttp, okio 和 androidx lifecycles 在内最流行的开源库。
    coil 名字的由来:取 coroutine image loader 首字母得来。

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"))    // and more...  

可以使用 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)   }

效果图:

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)          }  

效果图:

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)  }  

效果图:

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

灰色变换 grayscaletransformation

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

mbinding.image1.load(imageurl) {      transformations(grayscaletransformation())  }  

效果图:

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

gif

添加依赖

implementation("io.coil-kt:coil-gif:1.4.0")  

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

创建 gif imageloader 实例

val imageloader = imageloader.builder(context)      .componentregistry {          if (sdk_int >= 28) {              add(imagedecoderdecoder(context))          } else {              add(gifdecoder())          }      }      .build()         //设置全局唯一实例   coil.setimageloader(imageloader)  

加载 gif 图片:

mbinding.image1.load(gifurl)  

效果图如下:

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")             }         )  }  

取消下载

val imageurl = "https://t7.baidu.com/it/u=433422559,1779762296&fm=193&f=gif"    val disposable = mbinding.image1.load(imageurl)    //取消加载  disposable.dispose()  

替换 okhttp 实例

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

val okhttpclient = okhttpclient.builder()         .cache(coilutils.createdefaultcache(this))         .build()    val imageloader = imageloader.builder(this).okhttpclient {       okhttpclient  }.build()            coil.setimageloader(imageloader)  

自定义

  val okhttpclient = okhttpclient.builder()              .cache(coilutils.createdefaultcache(this))              .build()            val imageloader = 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 , 则禁用内存缓存。

默认行为:

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

memorycachepolicy 内存缓存策略,有4中策略,默认为 cachepolicy.enabled

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

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

crossfade 开启淡入淡出

coil 源码分析

coil 是一个单例类

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

总结

到此这篇关于android图片加载框架coil详细使用的文章就介绍到这了,更多相关android图片加载框架coil内容请搜索<猴子技术宅>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<猴子技术宅>!

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/adkf/1204762.html

(0)
上一篇 6天前
下一篇 6天前

精彩推荐

发表评论

您的电子邮箱地址不会被公开。