温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android图片加载框架Coil如何使用

发布时间:2022-07-29 09:51:33 来源:亿速云 阅读:360 作者:iii 栏目:开发技术

这篇文章主要介绍“Android图片加载框架Coil如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android图片加载框架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 在内最流行的开源库。
    Coil 名字的由来:取 Coroutine Image Loader 首字母得来。

添加依赖:

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

创建 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如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI