Android Coil的简单介绍及使用

前言:

本文是借鉴网上大佬的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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

返回值

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 到目前为止,我们创建的函数都只是为我们做一些事,做完了就结束。但实际上,有时还需要对事情的结果进行获取。这类…

使用Redis常遇到的问题

文章目录 概述缓存雪崩、穿透、击穿大key问题热Key问题缓存和数据库双写一致性问题缓存并发竞争Redis线上阻塞要如何排查Redis 常见的性能问题都有哪些Redis 如何做内存优化Redis数据倾斜 概述 在使用Redis时,有几个常见的问题可能会出现,包括但不限于以…

调用上传文件接口出现格式错误

一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别? 那就是json、和form-data,一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…

strcpy、strncpy、strcat、strncat、strcmp、strstr字符串函数的使用和模拟

strcpy的使用和模拟&#xff08;作用&#xff09; 将一个字符串的内容复制到另外一个字符串中代替掉。 strcpy的使用效果 #include <stdio.h> #include <string.h>int main () {char str1[]"Sample string";char str2[40];char str3[40];strcpy (str2…

Python 学习笔记【1】

此笔记仅适用于有任一编程语言基础&#xff0c;且对面向对象有一定了解者观看 文章目录 数据类型字面量数字类型数据容器字符串列表元组 type()方法数据类型强转 注释单行注释多行注释 输出基本输出连续输出&#xff0c;中间用“,”分隔更复杂的输出格式 变量定义del方法 标识符…

nginx搭建简单负载均衡demo(springboot)

目录 1 安装nignx 1.1 执行 brew install nginx 命令&#xff08;如果没安装brew可百度搜索如何安装brew下载工具。类似linux的yum命令工具&#xff09;。 1.2 安装完成会有如下提示&#xff1a;可以查看nginx的配置文件目录。 1.3 执行 brew services start nginx 命令启动…

if语句知识点

作用 让顺序执行的代码产生分歧。 if 语句 作用&#xff1a;满足条件时&#xff0c;多执行一些代码。 语法&#xff1a; if(bool类型值)//bool类型相关&#xff1a;bool变量&#xff0c;条件运算符表达式&#xff0c;逻辑运算符表达式 {满足条件要执行的代码&#xff0c;写在…

将三个字符串通过strcat连接起来并打印输出

将三个字符串通过strcat连接起来并打印输出 #include <stdio.h> #include <string.h> int main () { char a[10]"I", b[10]" am",c[10]" happy"; strcat(a,b); strcat(a,c); printf("%s",a); printf("\n"); re…

Java | Leetcode Java题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int n prices.length;int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 Math.max(buy1, -prices[i]);sell1 Math.max(sell1, b…

zynq PS点灯

摸鱼碎碎念&#xff1a; 需要做ADC采集并在TFT屏幕实时显示波形&#xff08;简易示波器&#xff09; 发现只使用fpga实现比较困难 使用的是zynq&#xff0c;刚好来把arm部分也学到 参考视频 与 教材文档 01_Zynq SoC FPGA的诞生_哔哩哔哩_bilibili (这是俺点开AXI4接口协…

爬虫学习2

中国国家地理网 单张图片爬取 import requests url http://img0.dili360.com/ga/M00/02/AB/wKgBzFQ26i2AWujSAA_-xvEYLbU441.jpg!rw9 headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0…

解锁 JavaScript ES6:函数与对象的高级扩展功能

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; ES5、ES6介绍 文章目录 ES6函数扩展1 默认参数1.1 之前写法1.2 ES6 写法1.3 注意点 2 …

基于VGG16使用图像特征进行迁移学习的时装推荐系统

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【React篇】简述React-Router 的实现原理及工作方式

React Router 路由的基础实现原理分为两种&#xff0c;如果是切换 Hash 的方式&#xff0c;那么依靠浏览器 Hash 变化即可&#xff1b;如果是切换网址中的 Path&#xff0c;就要用到 HTML5 History API 中的 pushState、replaceState 等。在使用这个方式时&#xff0c;还需要在…

数据库管理软件:Navicat Premium 17 中文激活版

Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Clo…

万字解析线控底盘技术

文章出处&#xff1a;汽车学堂Automooc 引言 在当今这个由科技驱动的时代&#xff0c;汽车电动化、智能化已成为汽车行业的热门话题。特斯拉的自动驾驶功能、蔚来的换电模式、以及比亚迪的刀片电池技术&#xff0c;这些创新不仅引领着市场趋势&#xff0c;也推动着消费者对智…

Leetcode2028. 找出缺失的观测数据

Every day a Leetcode 题目来源&#xff1a;2028. 找出缺失的观测数据 解法1&#xff1a;模拟 统计当前 m 个元素的总和 curSum sum(rolls)&#xff0c;总共 mn 个元素和为 total (m n) * mean。 排除 2 种情况&#xff1a; total - curSum > 6 * n&#xff1a;n 个…

链表(2)反转链表

题目描述 反转一个单链表。&#xff08;题目来源&#xff09; 思路一 其实&#xff0c;反转一个单向链表&#xff0c;我们可以看成是将链表中的每个结点的指向反向&#xff08;即从后一个结点指向前一个结点&#xff09;。 我们在考虑情况的时候&#xff0c;还是可以先考虑一般…

变种水仙花

变种水仙花 题干要求&#xff1a; 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆分后的乘积之和等于…

Ollama 本地大模型框架

该篇教程主要讲解*Ollama的安装和简单使用* Ollama&#xff1a; 在本地启动并运行大型语言模型。 主要流程目录&#xff1a; 1.安装 2.使用 2.1.下载模型 2.2.简单使用 2.3.中文模型 2.4.中文社区 3.总结 1.安装 创建一个容器 切换”高级视图“ 参考填写 ollama oll…