当前位置:首页 > 谈天说地

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

34资源网2022-07-29674

简介

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

效果图:

圆角

        //没有圆角
        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)
        }

效果图:

圆形

布局文件

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

效果图:

灰色变换 grayscaletransformation

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

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

效果图:

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)

效果图如下:

监听下载过程

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 , 则禁用内存缓存。

默认行为:

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

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

crossfade 开启淡入淡出

coil 源码分析

coil 是一个单例类

总结

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

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/20002.html

分享给朋友:

相关文章

30句用喜从天降造句的语句

30句用喜从天降造句的语句

1、让他去泰山旅游,那真是喜从天降。…

养成良好的习惯,做一名有品位的教师

养成良好的习惯,做一名有品位的教师

陶行知先生说:“思想决定行动,行动养成习惯,习惯形成品质,品质决定命运”。最近从网上读了《影响教师一生的100个好习惯》一书,不禁对陶先生这句话有了更深刻的领悟和理解。阅读本书带给我的不仅是享受,更多的则是生活的引领,智慧的传递和方法的教授…

一周涨粉几百万,“张同学”凭什么火?

一周涨粉几百万,“张同学”凭什么火?

编者按:本文来自微信公众号时趣研究院(ID:SocialTouch2020),作者:时有趣,创业邦经授权转载 在最近的一段时间里,名叫“张同学”的博主刷屏了抖音,相关话题频频登上热榜,甚至还得到了人民网的点评。 张同学第一个视频的发布日期…

董明珠还需要几个网红?

董明珠还需要几个网红?

编者按:本文来自科技新知,创业邦经授权发布。 作者丨李哩哩 编辑丨月见 一个网红,就是一个渠道。八个网红,就是八个渠道。 董明珠应该进一步向罗永浩看齐。 12月1日,交个朋友直播间发布了名为“交个朋友宇宙”的文章,文章介绍罗永浩“交…

双十二可以消失了

双十二可以消失了

编者按:本文转自新熵,作者白芨,编辑月见,创业邦经授权转载。 越来越多的数据表明,美国最大的购物节“黑色星期五”在今年有所遇冷。 福布斯报道显示,与2019年相比,感恩节当天美国实体零售的客流量下降超过九成,原因是高峰被提前分流了——早在“…

苏宁易付宝在哪里找(苏宁易付宝解绑流程)

苏宁易付宝在哪里找(苏宁易付宝解绑流程)

天眼查App显示,近日,南京苏宁易付宝网络科技有限公司发生工商变更,尚姬娟退出法定代表人、执行董事、总经理一职,由卢世栋接任。 南京苏宁易付宝网络科技有限公司成立于2011年1月,注册资本为10亿人民币,经营范围包含互联网支付;计算机网络…