本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android进阶之Coil-为kotlin而生的图片库详解
冷月葬花魂 · 294浏览 · 发布于2021-10-12 +关注

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。

前言

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库;

与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势;

它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选;

一、Coil介绍和使用

1、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 在内最流行的开源库;

2、使用

①Coil 可以在 mavenCentral() 下载

implementation("io.coil-kt:coil:1.2.1")

    ②可以使用 ImageView 的扩展函数 load 加载一张图片:

    // URL 
    imageView.load("https://www.example.com/image.jpg") 
    // Resource 
    imageView.load(R.drawable.image) 
    // File 
    imageView.load(File("/path/to/image.jpg"))

      可以使用 lambda 语法轻松配置请求选项:

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

        error

        imageView.load(url) { 
                error(R.drawable.error) 
            }

          placeholder预置展位图

          imageView.load(url) { 
                  placeholder(R.drawable.placeholder) 
                  crossfade(3000) 
              }

            crossfade的动画时间

            imageView.load(url) { 
                    crossfade(3000) 
                }

              ③transformations

              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)

                            总结

                            Coil可以配合Kotlin协程实现图片加载:

                            • 加载性能好:缓存管理(MemCache、DiskCache)、动态采样(Dynamic image sampling)、加载中暂停/终止等功能有助于提高图片加载效率

                            • 体积小:其包体积与Picasso相当,显著低于Glide和Fresco,仅仅只有1500个方法,但是在功能上却不输于其他同类库;

                            • 简单易用:配合Kotlin扩展方法等语法优势,API简单易用;

                            • 技术先进:基于Coroutine、OkHttp、Okio、AndroidX等先端技术开发,确保了技术上的先进性;


                            相关推荐

                            android下vulkan与opengles纹理互通

                            talkchan · 1158浏览 · 2020-11-23 10:37:39
                            Android 使用RecyclerView实现轮播图

                            奔跑的男人 · 2166浏览 · 2019-05-09 17:11:13
                            微软发布新命令行工具 Windows Terminal

                            吴振华 · 860浏览 · 2019-05-09 17:15:04
                            Facebook 停止屏蔽部分区块链广告

                            · 746浏览 · 2019-05-09 17:20:08
                            加载中

                            0评论

                            评论
                            分类专栏
                            小鸟云服务器
                            扫码进入手机网页