Android Compose 七:常用组件 Image

1 基本使用

在这里插入图片描述

 Image(painter = painterResource(id = R.drawable.ic_wang_lufei), contentDescription = "" )  // 图片Spacer(modifier = Modifier.height(20.dp))Image(imageVector = ImageVector.vectorResource(id = R.drawable.ic_android_black_24dp), contentDescription = "")  //矢量图Spacer(modifier = Modifier.height(20.dp))Image(bitmap = ImageBitmap.imageResource(id = R.drawable.ic_wang_lufei), contentDescription = "") //bitmap 

效果
在这里插入图片描述

2 参数说明

以上三种创建方式,除了引用资源方式不同外,其他参数相同

fun Image(painter: Painter,contentDescription: String?,modifier: Modifier = Modifier,alignment: Alignment = Alignment.Center,contentScale: ContentScale = ContentScale.Fit,alpha: Float = DefaultAlpha,colorFilter: ColorFilter? = null
) fun Image(imageVector: ImageVector,contentDescription: String?,modifier: Modifier = Modifier,alignment: Alignment = Alignment.Center,contentScale: ContentScale = ContentScale.Fit,alpha: Float = DefaultAlpha,colorFilter: ColorFilter? = null
) fun Image(bitmap: ImageBitmap,contentDescription: String?,modifier: Modifier = Modifier,alignment: Alignment = Alignment.Center,contentScale: ContentScale = ContentScale.Fit,alpha: Float = DefaultAlpha,colorFilter: ColorFilter? = null,filterQuality: FilterQuality = DefaultFilterQuality
) 

点点点最后点到了 Layout 是不是就可以说是Image就是Layout 然后控制图片大小形状等信息

 Layout({},modifier.then(semantics).clipToBounds().paint(painter,alignment = alignment,contentScale = contentScale,alpha = alpha,colorFilter = colorFilter)) { _, constraints ->layout(constraints.minWidth, constraints.minHeight) {}}

2.1 资源加载参数

painter: Painter,
imageVector: ImageVector, //可以通过 ImageVector.vectorResource(id = ) 获取图片后做处理再显示
bitmap: ImageBitmap, //可以通过 ImageBitmap.imageResource(id = ) 获取图片后做处理再显示
实现bitmap等比缩放

 	Image(painter = painterResource(id = R.drawable.ic_wang_lufei), contentDescription = "王路飞1" )Spacer(modifier = Modifier.height(20.dp))var bitmap = ImageBitmap.imageResource(id = R.drawable.ic_wang_lufei)//获取图片宽高等比缩放val width = bitmap.width;val height = bitmap.height;Image(bitmap = bitmap,modifier = Modifier.width(pxToDp(px = width) / 2).height(pxToDp(px = height)/2),contentDescription = "王路飞2")

效果
在这里插入图片描述

//ImageBitmap 转 Bitmapval asAndroidBitmap = bitmap.asAndroidBitmap()//Bitmap 转 ImageBitmapval  imageBitmap = asAndroidBitmap.asImageBitmap()Image(bitmap = imageBitmap,contentDescription = "王路飞2")

.asImageBitmap() 其实就是创建了一个ImageBitmap

fun Bitmap.asImageBitmap(): ImageBitmap = AndroidImageBitmap(this)internal class AndroidImageBitmap(internal val bitmap: Bitmap) : ImageBitmap {...}
 //ImageBitmap 转 Bitmapval asAndroidBitmap = bitmap.asAndroidBitmap()//Bitmap 转 ImageBitmapval  imageBitmap = asAndroidBitmap.asImageBitmap()val bitmap1 = BitmapFactory.decodeResource(Resources.getSystem(),R.drawable.ic_wang_lufei1)Image(bitmap = bitmap1.asImageBitmap(),contentDescription = "王路飞2")`

效果
在这里插入图片描述

2.2 alignment 图片对齐方式

当框大于图片大小时

Image(painter = painterResource(id = R.drawable.ic_wang_lufei), contentDescription = "王路飞1" )Spacer(modifier = Modifier.height(20.dp))Image(painter = painterResource(id = R.drawable.ic_wang_lufei),contentDescription = "王路飞1",modifier = Modifier.fillMaxWidth(),alignment = Alignment.Center)

效果 居中 显示效果 受contentScale影响
在这里插入图片描述

2.3 contentScale 预览效果

默认 contentScale: ContentScale = ContentScale.Fit,
在这里插入图片描述
contentScale = ContentScale.Crop 宽或高撑满布局 另外一方向居中显示

 Image(painter = painterResource(id = R.drawable.ic_wang_lufei),contentDescription = "王路飞1",modifier = Modifier.fillMaxWidth(),alignment = Alignment.Center,contentScale = ContentScale.Crop)

在这里插入图片描述
modifier = Modifier.fillMaxSize(),
在这里插入图片描述

contentScale = ContentScale.FillBounds
在这里插入图片描述
contentScale = ContentScale.FillHeight 高度撑满,宽度自适应
在这里插入图片描述
contentScale = ContentScale.Inside 显示图片大小
在这里插入图片描述
contentScale = ContentScale.FillWidth 宽度撑满高度自适应
在这里插入图片描述

contentScale = ContentScale.None
在这里插入图片描述

2.4 alpha = 0.5f, 透明度

Image(painter = painterResource(id = R.drawable.lufei3),contentDescription = "王路飞1",modifier = Modifier.width(300.dp).height(100.dp),alignment = Alignment.Center,contentScale = ContentScale.Crop,alpha = 0.5f,)

在这里插入图片描述

2.5 colorFilter = ColorFilter.lighting(multiply = Color.Red,add = Color.Black) 颜色过滤器

Image(painter = painterResource(id = R.drawable.lufei3),contentDescription = "王路飞1",modifier = Modifier.width(300.dp).height(100.dp),alignment = Alignment.Center,contentScale = ContentScale.Crop,colorFilter = ColorFilter.lighting(multiply = Color.Red,add = Color.Black))

在这里插入图片描述

        /*** Create a [ColorFilter] that can be used to simulate simple lighting effects.* A lighting ColorFilter is defined by two parameters, one used to multiply the source* color and one used to add to the source color** @param multiply Color that will be added to the source color when the color*          filter is applied* @param add Color used to multiply the source color when the color filter is applied.*/@Stablefun lighting(multiply: Color, add: Color): ColorFilter =actualLightingColorFilter(multiply, add)

翻译
在这里插入图片描述
另外两个滤波

        /*** Creates a color filter that applies the blend mode given as the second* argument. The source color is the one given as the first argument, and the* destination color is the one from the layer being composited.** The output of this filter is then composited into the background according* to the [Paint.blendMode], using the output of this filter as the source* and the background as the destination.** @param color Color used to blend source content* @param blendMode BlendMode used when compositing the tint color to the destination*/@Stablefun tint(color: Color, blendMode: BlendMode = BlendMode.SrcIn): ColorFilter =actualTintColorFilter(color, blendMode)/*** Create a [ColorFilter] that transforms colors through a 4x5 color matrix. This filter can* be used to change the saturation of pixels, convert from YUV to RGB, etc.** @param colorMatrix ColorMatrix used to transform pixel values when drawn*/@Stablefun colorMatrix(colorMatrix: ColorMatrix): ColorFilter =actualColorMatrixColorFilter(colorMatrix)

默认的滤波器

@kotlin.jvm.JvmInline
value class ColorMatrix(val values: FloatArray = floatArrayOf(1f, 0f, 0f, 0f, 0f,0f, 1f, 0f, 0f, 0f,0f, 0f, 1f, 0f, 0f,0f, 0f, 0f, 1f, 0f)
) 

咱们稍微改个值

 Image(painter = painterResource(id = R.drawable.lufei3),contentDescription = "王路飞1",modifier = Modifier.width(300.dp).height(100.dp),alignment = Alignment.Center,contentScale = ContentScale.Crop,
//           colorFilter = ColorFilter.lighting(multiply = Color.Red,add = Color.Black)colorFilter = ColorFilter.colorMatrix(ColorMatrix(floatArrayOf(1f, 0f, 0f, 0f, 0f,0f, 0f, 0f, 0f, 0f,0f, 0f, 1f, 0f, 0f,0f, 0f, 0f, 1f, 1f))))

效果
在这里插入图片描述
实际使用中需要什么效果,咱也不知道,咱也不敢吭,试吧就

3 常用的图片效果

圆角矩形
圆形图片

  Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.clip(RoundedCornerShape(20.dp)))Spacer(modifier = Modifier.height(20.dp))Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.clip(CircleShape))

在这里插入图片描述

加边框的效果

 Spacer(modifier = Modifier.height(20.dp))Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.border(2.dp, color = Color.Red))Spacer(modifier = Modifier.height(20.dp))Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.clip(CircleShape) .border(2.dp, color = Color.Red, shape = CircleShape))

效果
在这里插入图片描述

增加边框时 shape = CircleShape 需要与image的shap一致,否则效果如下
在这里插入图片描述

4实现阴影效果
 Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.clip(CircleShape) .border(2.dp, color = Color.Red, shape = CircleShape).shadow(30.dp, shape = CircleShape,true,Color.Blue,Color.Yellow))

给image 设置shadow好像无效果
在这里插入图片描述
前边Button里说过
最后调用了Box
在这里插入图片描述
于是

   Box(modifier = Modifier.shadow(30.dp, shape = CircleShape,true,Color.Blue,Color.Red),){Image(painter = painterResource(id = R.drawable.ic_wang_lufei1),contentDescription = "",modifier = Modifier.clip(CircleShape).border(2.dp, color = Color.Red, shape = CircleShape))}

效果
在这里插入图片描述

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

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

相关文章

Round-Robin 调度逻辑算法

Round-Robin 调度逻辑算法 1 Intro1.1 固定优先级1.2 Round-Robin算法 之前上学还是工作,都接触过调度算法:Round-Robin和weight-Round Robin算法,但只知道它的功能和目的是什么,没有具体了解如何实现的; 现在是工作上…

maven聚合工程整合springboot+mybatisplus遇到的问题

前言(可以直接跳过看下面解决方法) 项目结构 两个module: yema-terminal-boot 是springboot项目,子包有:controller、service、dao 等等。属于经典三层架构。那么,该module可以理解为是一个单体项目&…

kafka-消费者组偏移量重置

文章目录 1、消费者组偏移量重置1.1、列出所有的消费者组1.2、查看 my_group1 组的详细信息1.3、获取 kafka-consumer-groups.sh 的帮助信息1.4、 偏移量重置1.5、再次查看 my_group1 组的详细信息 1、消费者组偏移量重置 1.1、列出所有的消费者组 [rootlocalhost ~]# kafka-…

监管端..

文章目录 1. 登录流程2. 日志AOP 1. 登录流程 使用账号(手机号)、密码、验证码。登录就是获取token的,输入的账号密码用RSA加密(非对称) 首先输入账号密码,在发送手机验证码时候先校验账号密码有没有输入…

私域如何高效管理多微信并实现聚合聊天?

在私域经营中,管理多个微信号是一项具有挑战性的任务。为了提高工作效率,辅助工具成为必不可少的一部分。而个微管理系统将为大家带来高效的多微信号管理体验,让大家能够更好地聚合聊天。 首先,个微管理系统提供了一个统一的界面…

【UML】-01-UML基本元素的介绍

1、UML的词汇表 (1)事物; (2)关系; (3)图。 事物是对模型中首要成分的抽象;关系把事物结合在一起;图聚集了相关的事物。 注:事物也称为元素 2…

vivo X100 Ultra自称销售额破5亿,真实销量成谜?

文/张诗雨 5月28日9点,vivo 正式启动了其旗舰新机vivo X100 Ultra的全渠道销售工作。这款新机,早在5月13日就已正式亮相,并推出了三种存储容量的版本,分别是12GB256GB、16GB512GB以及16GB1TB,而相应的售价也不低&…

常见排序算法之选择排序

目录 一、选择排序 1.1 什么是选择排序? 1.2 思路 1.2.1 思路一 1.2.2 优化思路 1.3 C语言源码 1.3.1 思路一 1.3.2 优化思路 二、堆排序 2.1 调整算法 2.1.2 向上调整算法 2.1.3 向下调整算法 2.2 建堆排序 一、选择排序 1.1 什么是选择排序&#xf…

人工智能与区块链技术:开启未来科技的双引擎

在当今科技飞速发展的时代,人工智能和区块链技术如同两颗璀璨的明星,照亮了人类通往未来的道路。 人工智能,以其强大的学习和分析能力,正悄然改变着我们的生活。它能够处理海量的数据,为我们提供精准的预测和个性化的…

设计模式:外观模式 导诊台。空指针异常

文章目录 UML类图目录结构思路Register.javaOutpatientService.javaPrice.javaPharmacy.javaFacade.java空指针异常 Test.java UML类图 目录结构 思路 照着写,然后getRegister()方法的具体实现就是:打印一句话,然后到…

从 0 手撸一个 pytorch

背景介绍 最近抽空看了下 Andrej Karpathy 的视频教程 building micrograd,教程的质量很高。教程不需要任何前置机器学习基础,只需要有高中水平的数学基础即可。整个教程从 0 到 1 手撸了一个类 pytorch 的机器学习库 micrograd,核心代码不到…

Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比

🔥 个人主页:空白诗 文章目录 👋 引言📌 Vuex 基础知识核心构成要素示例代码 📌 Pinia 基础知识核心构成要素示例代码 📌 Vuex与Pinia的区别📌 使用示例与对比📌 总结 👋…

探索Solana链上DApp开发:高性能区块链生态的新机遇

Solana 是一个新兴的区块链平台,致力于为 DApp(去中心化应用程序)开发者提供高性能、低成本的解决方案。Solana 的独特之处在于其创新性的共识机制和高吞吐量的网络,使得开发者可以构建高度可扩展的 DApp,并为用户提供…

云服务器如何使用局域网服务器的磁盘空间

说明 云服务器中的磁盘空间不足时,想要开通更多的磁盘空间,但奈何价格太贵,开不起 刚好局域网中有闲置的服务器空间可以拿来用,这里我们直接使用Samba服务来共享文件夹,使用frp来进行内网穿透; 1、磁盘挂…

OSPF优化——OSPF减少LSA更新量2

二、特殊区域——优化非骨干区域的LSA数量 不是骨干区域、不能存在虚链路 1、不能存在 ASBR 1)末梢区域 该区域将拒绝 4、5LSA的进人,同时由该区域连接骨干0区域的ABR 向该区域,发布一条3类的缺省路由; 该区域内每台路由器均需配置&#xf…

Unity 实现心电图波形播放(需波形图图片)

实现 在Hierarchy 面板从2D Object 中新建一个Sprite,将波形图图片的赋给Sprite。 修改Sprite 的Sprite Renderer 组件中Draw Mode 为Tiled, 修改Sprite Renderer 的Size 即可实现波形图播放。 在Hierarchy 面板从2D Object 中新建一个Sprite Mask 并赋以遮罩图片…

【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)

🔍目的 允许派生组件从与派生类型兼容的基本组件继承某些功能。 🔍解释 真实世界例子 对于正在策划赛事的综合格斗推广活动来说,确保在相同重量级的运动员之间组织比赛至关重要。这样可以防止体型明显不同的拳手之间的不匹配,例如…

生成模型 | 从 VAE 到 Diffusion Model (下)

生成模型 | 从 VAE 到 Diffusion Model (上)的链接请点击下方蓝色字体: 上部分主要介绍了,GAN, AE, VAE, VQ-VAE, DALL-E 生成模型 | 从 VAE 到 Diffusion Model (上) 文章目录 我们先来看一下生成模型现在的能力一&…

IT人的拖延——一放松就停不下来,耽误事?

拖延的表现 在我们的日常工作中,经常会面对这样一种情况:因为要做的Sprint ticket比较复杂或者长时间的集中注意力后,本来打算休息放松一下,刷刷剧,玩玩下游戏,但却一个不小心,没控制住时间&am…

IP 分片过程及偏移量计算

IP 报头中与分片相关的三个字段 1、 标识符( ldentifier ):16 bit 该字段与 Flags 和 Fragment Offest 字段联合使用, 对较大的上层数据包进行分段( fragment ) 操作。 路由器将一个包拆分后,所有拆分开的…