Android-图片加载库 Coil 介绍

code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群

作者:多仔百事宅
链接:https://www.jianshu.com/p/88771866f2ac
声明:本文已获多仔百事宅授权发表,转发等请联系原作者授权

框架介绍

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选。

这应该是一个很新的一个图片加载库,完全使用kotlin编写,使用了kotlin的协程,图片网络请求方式默认为Okhttp,相比较于我们常用的Picasso,Glide或者Fresco,它有以下几个特点:

  1. 足够快速,它在内存、图片存储、图片的采样、Bitmap重用、暂停\取消下载等细节方面都有很大的优化(相比于上面讲的三大框架);

  2. 足够轻量,只有大概1500个核心方法,当然也是相对于PGF而言的;

  3. 足够新,也足够现代!使用了最新的Koltin协程所编写,充分发挥了CPU的性能,同时也使用了OKHttp、Okio、LifeCycle等比较新式的Android库。

使用

github地址为:https://github.com/coil-kt/coil/

首先需要配置你的AS环境包含Kotlin开发环境,然后添加依赖:

implementation("io.coil-kt:coil:1.1.1") 要将图像加载到ImageView中,请使用加载扩展功能:

// 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...

可以使用可选的配置请求:

imageView.load("https://www.example.com/image.jpg") {
    crossfade(true)
    placeholder(R.drawable.image)
    transformations(CircleCropTransformation())
}

基本变化:

Coil默认提供了四种变换:模糊变换(BlurTransformation)、圆形变换(CircleCropTransformation)、灰度变换(GrayscaleTransformation)和圆角变换(RoundedCornersTransformation):

基础用法:

imageView.load(IMAGE_URL){
     transformations(GrayscaleTransformation())
}

直接加入变换就可以, 同时可支持多种变换:

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

Gif加载

Coil基础包中是不支持Gif加载的,需要添加extend包:

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

此时需要更改一下代码的方式,在imageLoader中注册Gif组件:

val gifImageLoader = ImageLoader(this) {
            componentRegistry {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    add(ImageDecoderDecoder())
                } else {
                    add(GifDecoder())
                }
            }
}

使用本组件之后,ImageView可直接使用:

id_image_gif.load(GIF_IMAGE_URL, gifImageLoader)

SVG加载

Coil也可以进行SVG加载的,同gif一样,也是需要添加extend包的:

implementation("io.coil-kt:coil-svg:0.9.5")

代码如下:

val svgImageLoader = ImageLoader(this){
            componentRegistry {
                add(SvgDecoder(this@MainActivity))
            }
        }

id_image_svg.load(R.drawable.ic_directions_bus_black_24dp, svgImageLoader)

从Glide\Picasso迁移到Coil

基本的用法的扩展为:

// Glide
     Glide.with(context)
    .load(url)
    .into(imageView)
 
// Picasso
     Picasso.get()
    .load(url)
    .into(imageView)
 
// Coil
   imageView.load(url)

图片设置ScaleType的方式:

imageView.scaleType = ImageView.ScaleType.FIT_CENTER
 
    // Glide
    Glide.with(context)
     .load(url)
     .placeholder(placeholder)
     .fitCenter()
     .into(imageView)
 
    // Picasso
    Picasso.get()
        .load(url)
        .placeholder(placeholder)
        .fit()
        .into(imageView)
 
    // Coil (autodetects the scale type)
    imageView.load(url) {
     placeholder(placeholder)
}

相关推荐

如何实现一个图片加载框架

项目所须:加载大图片 图片压缩

Glide 加载图片实现进度条效果

Android 基于 glide 4.0 封装图片加载库

在 Flutter 中实现酷炫的文本动画(含代码示例)

我是code小生,喜欢可以随手点个在看、转发给你的朋友,谢谢~

请点个在看呀!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值