当前位置: 首页 > 科技观察

Android进阶Coil-为kotlin而生的图片库详解

时间:2023-03-12 16:08:16 科技观察

本文转载自微信公众号《Android开发编程》,作者Android开发编程。转载本文请联系Android开发编程公众号。PrefaceCoil是Android上全新的图片加载框架。它的全称是coroutineimageloader,是一个协程图片加载库;与Glide、Picasso或Fresco等传统图像加载库相比。这具有轻量级(仅约1500个方法)、快速、易于使用和更现代的API等优点;它支持GIF和SVG,可以执行四种默认变换:模糊、圆形裁剪、灰度和圆角。这一切都是用Kotlin编写的。如果你是纯Kotlin项目,那么这个库应该是你的首选;一、Coil介绍及使用1、Coil介绍Coil是一个Android图片加载库,通过Kotlin协程加载图片。特点如下:更快:Coil有多项性能优化,包括内存缓存和磁盘缓存、将缩略图保存在内存中、回收位图、自动挂起和取消图像网络请求等;更轻量:Coil只有2000个方法(前提是你的APP中集成了OkHttp和Coroutines),Coil和Picasso的方法数量差不多,比Glide和Fresco要轻很多;更易用:Coil的API充分利用了Kotlin语言的新特性,简化并减少了大量的样板代码;更流行:Coil更喜欢Kotlin语言开发,使用最流行的开源库包括Coroutines、OkHttp、Okio和AndroidXLifecycles;2.使用①Coilcandownloadimplementation("io.coil-kt:coil:1.2.1")②可以使用ImageView的扩展函数load加载图片://URLimageView.load("https://www.example.com/image.jpg")//ResourceimageView.load(R.drawable.image)//FileimageView.load(File("/path/to/image.jpg"))可以使用lambda轻松配置请求选项语法:imageView.load("https://www.example.com/image.jpg"){crossfade(true)placeholder(R.drawable.image)transformations(CircleCropTransformation())}errormageView.load(url){error(R.drawable.error)}placeholderpresetboothimageimageView.load(url){placeholder(R.drawable.placeholder)crossfade(3000)}crossfade动画时间imageView.load(url){crossfade(3000)}③transformationsCoil默认提供四种transformation:BlurTransformation、CircleCropTransformation、GrayscaleTransformation和RoundedCornersTransformation基本用法:imageView.load(IMAGE_URL){transformations(GrayscaleTransformation())}可以直接加入transformation,可以支持多种transformation同时:imageView.load(IMAGE_URL){transformations(GrayscaleTransformation(),RoundedCornersTransformation(topLeft=2f,topRight=2f,bottomLeft=40f,bottomRight=40f))}④Gif加载Coil基础包不支持Gif加载,需要添加扩展包:implementation("io.coil-kt:coil-gif:0.9.5")这时候需要改变代码的方式,在imageLoader中注册Gif组件:valgifImageLoader=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)⑤加载SVGCoil也可以加载SVG,和gif一样,也需要添加扩展包:implementation("io.coil-kt:coil-svg:0.9.5")代码如下:valsvgImageLoader=ImageLoader(this){componentRegistry{add(SvgDecoder(this@MainActivity))}}id_image_svg.load(R.drawable.ic_directions_bus_black_24dp,svgImageLoader)总结Coil可以配合Kotlin协程实现图片加载:加载性能好:缓存管理(MemCache、DiskCache)、动态图片采样(Dynamicimagesampling)、加载时暂停/终止等有助于提高图片加载效率体积小:其封装大小与Picasso相当,明显低于Glide和Fresco,只有1500个方法,但在功能上不逊色于其他同类库;易用性:借助Kotlin扩展方法等语法优势,API简单易用;先进技术:基于Coroutine、OkHttp、Okio、AndroidX等前沿技术开发,确保技术先进性;