广州做网站系统,nginx网站开发,中文网页模板大全,怎么下载文件前言#xff1a;
本文是借鉴网上大佬的Coil相关技术文章及结合自己项目中的实际使用情况#xff0c;对Coil作一个简单介绍。
简介#xff1a;
Coil是一个Android的图片加载框架库#xff0c;是通过Kotlin协程的方式加载图片的#xff0c;相对于Glide、Picasso、Fresco等…
前言
本文是借鉴网上大佬的Coil相关技术文章及结合自己项目中的实际使用情况对Coil作一个简单介绍。
简介
Coil是一个Android的图片加载框架库是通过Kotlin协程的方式加载图片的相对于Glide、Picasso、Fresco等的较为传统的图片加载库而言Coil更加轻量、快速、易用的特性得到很多Android开发者的青睐如果你是纯Kotlin开发的项目那么推荐你使用Coil。
快速上手使用
依赖
首先要添加依赖同时记得添加相关权限如加载网络图片
implementation(io.coil-kt:coil:2.4.0)// 如下是对 Gif、SVG、视频帧等类型的图片支持库
implementation(io.coil-kt:coil-gif:2.4.0)
implementation(io.coil-kt:coil-svg:2.4.0)
implementation(io.coil-kt:coil-video:2.4.0)简单使用
通过ImageView的扩展函数的方式加载图片
//URL 网络图片
imageView.load(https://xxx.xxx.com/image.jpg)
//Resource 资源素材图片
imageView.load(R.mipmap.icon)
//File 文件
imageView.load(File(/path/image.jpg))
//以及更多方式...
配置其他需求
淡入淡出淡入淡出时间加载中占位图图片错误占位图圆形模式圆角模式等
imageView.load(https://www.网址.com/image.jpg) {crossfade(true) //淡入淡出crossfade(3000)//淡入淡出时间placeholder(R.drawable.default_image) //加载中占位图error(R.drawable.error_image) //加载错误占位图transformations(RoundedCornersTransformation(10f), MaskCoilTransformation()) //圆角遮罩自定义见下文代码
}自定义其他需求 如果想要配置更多的图片展示模式例如我们通常用到过多的圆形圆角以及一些特殊场景用到的高斯模糊、灰色变换、添加水印、遮罩等Coil都可以帮你实现但是2.4.0版本以上的好像只提供了CircleCropTransformation圆形、RoundedCornersTransformation圆角两种但是也不必着急因为你可以依照这两种实现Transformation接口自定义想要的效果 Coil中Transformation接口
下面根据需求写的一个带有遮罩的效果MaskCoilTransformation
import android.graphics.Bitmap
import android.graphics.Bitmap.createBitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import androidx.annotation.ColorInt
import coil.decode.DecodeUtils
import coil.size.Scale
import coil.size.Size
import coil.size.pxOrElse
import coil.transform.Transformation
import kotlin.math.roundToInt/*** description 图片蒙层设置*/
class MaskCoilTransformation(ColorInt private val color: Int Color.parseColor(#B3E8ECF0)
): Transformation {override val cacheKey: String MaskCoilTransformation($color)override suspend fun transform(input: Bitmap, size: Size): Bitmap {val dstWidth size.width.pxOrElse { input.width }val dstHeight size.height.pxOrElse { input.height }val multiplier DecodeUtils.computeSizeMultiplier(srcWidth input.width,srcHeight input.height,dstWidth dstWidth,dstHeight dstHeight,scale Scale.FILL)val outputWidth (dstWidth / multiplier).roundToInt()val outputHeight (dstHeight / multiplier).roundToInt()val output createBitmap(outputWidth, outputHeight, input.config)val canvas Canvas(output)val paint Paint()paint.isAntiAlias truepaint.colorFilter PorterDuffColorFilter(Color.parseColor(#B3E8ECF0), PorterDuff.Mode.SRC_ATOP)canvas.drawBitmap(input, 0f, 0f, paint)return output}
}
The End.