Jetpack Compose图片组件使用实例详细讲解

目录
  • 概述
  • 示例解析
    • 1.Icon图标组件
    • 2.Image图片组件
  • 总结

概述

在Compose中,图片组件主要有两种,分别是显示图标的Icon组件和显示图片的Image组件,当我们显示一系列的小图标的时候,我们可以使用Icon组件,当显示图片时,我们就用专用的Image组件。在Android传统的View中,我们显示图片和图标都是使用ImageView。我个人比较喜欢Compose的这种分开的方式,增加了代码的可读性。

示例解析

1.Icon图标组件

Icon组件用于展示一系列的小图标,它支持三种不同类型的图片设置,分别是:矢量图、位图、自定义绘制的图标

(1)矢量图对象,可以显示SVG格式的图标

@Composable
fun Icon(
    imageVector: ImageVector,
    contentDescription: String?,
    modifier: Modifier = Modifier,
    tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)

(2)位图对象,可以显示JPG,PNG格式的图标

@Composable
fun Icon(
    bitmap: ImageBitmap,
    contentDescription: String?,
    modifier: Modifier = Modifier,
    tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)

(3)自定义画笔,可以使用它在canvas上直接绘制图标

@Composable
fun Icon(
    painter: Painter,
    contentDescription: String?,
    modifier: Modifier = Modifier,
    tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)

当我们使用上面的方法去展示图标时,既可以传递具体类型的实例,也可以通过资源文件(res/drawable …)引用

// 矢量图资源
 Icon(imageVector = ImageVector.vectorResource(id = R.drawable.ic_svg), contentDescription = null)
 // 位图资源
 Icon(bitmap = ImageBitmap.imageResource(id = R.drawable.ic_bmp), contentDescription = null)
 // 画笔资源
 Icon(painter = painterResource(id = R.drawable.ic_both), contentDescription = null)

如上面的代码所示,ImageVector和ImageBitmap都提供了对应的加载drawable资源的方法,vectorResource用来加载一个矢量XML,imageResource用来加载jpg或者时png图片,而painterResource对以上的两种drawable都支持,内部会根据资源创建对应的画笔进行图标的绘制

接下来我们看下使用Icon组件显示一个具体的图标应该怎么写,代码如下:

  @Composable
    fun IconDemo(){
        Icon(imageVector = Icons.Filled.CheckCircle,
            contentDescription = null,
            tint = Color.Red
        )
    }

运行结果:

代码很简单,就展示了一个勾选的图标,这里我们直接使用的时Material包里预置的CheckCircle图标,contentDescription 参数是系统的无障碍功能,这个参数中设置的文字会被转换成语音,供视障人士听取内容,这个参数没有默认值,必须手动设置,Material包里面还提供了很多其他的图标,都可以通过Icons.xxx.xxx的方式调用。

2.Image图片组件

图片组件用来显示一张图片,和Icon图标组件一样,它有三种类型的图片设置,这里我们就以Painter类型的为例,下面为Image组件的Painter类型的参数列表:

@Composable
fun Image(
    painter: Painter,
    contentDescription: String?,
    modifier: Modifier = Modifier,
    alignment: Alignment = Alignment.Center,
    contentScale: ContentScale = ContentScale.Fit,
    alpha: Float = DefaultAlpha,
    colorFilter: ColorFilter? = null
)

contentScale参数用于指定图片在Image组件中的伸缩样式,类似于传统视图ImageView的scaleType属性,它有以下几种类型

ContentScale.Crop: 居中裁剪,类似于传统ImageView的ScaleType.CenterCrop

ContentScale.Fit: 类似于传统ImageView的ScaleType.fitCenter

ContentScale.FillHeight: 充满高

ContentScale.FillWidth: 充满宽

ContentScale.None: 不处理

ContentScale.FillBounds: 类似ScaleType.fitXY拉伸撑满宽高

colorFilter 参数用于设置一个ColorFilter,它可以通过对绘制的图片的每个像素颜色进行修改,以实现不同的图片效果,ColorFilter有三种修改方式,分别是: tint,colorMatrix,lighting.

// tint用BlendMode混合指定颜色,其中参数color将用来混合原图片每个像素的颜色
// 参数blendMode是混合的模式,blendModel有多种混合模式
// 和传统是同中使用的Xfermode的PorterDuff.Model类似
ColorFilter.tint(color: Color, blendMode: BlendMode = BlendMode.SrcIn)
// colorMatrix通过传入一个RGBA四通道的4x5的数字矩阵去处理颜色的变化
// 比如降低图片的饱和度以达到图片灰化的目的
ColorFilter.colorMatrix(colorMatrix: ColorMatrix)
// lighting用来为图片应用一个简单的灯光效果
// 它由两个参数定义,第一个用于颜色相乘,第二个用于添加原图颜色
ColorFilter.lighting(multiply: Color, add: Color)

最后,我们看下简单的一个使用Image组件展示一张图片的例子

   @Composable
    fun ImageDemo()
    {
        Image(painterResource(id = R.drawable.portrait),
            contentDescription = null,
            contentScale = ContentScale.Crop,
        )
    }

运行结果:

总结

本文主要介绍了Icon图标组件和Image图片组件的使用方法,在开发应用时,读者应该根据自己的应用场景进行选择。写出更好更可读的界面代码。本文介绍的都属于基础知识,若要探究更高深的界面知识,请各位读者继续看后面的文章。

到此这篇关于Jetpack Compose图片组件使用实例详细讲解的文章就介绍到这了,更多相关Jetpack Compose图片组件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android使用Jetpack Compose开发零基础起步教程

    目录 永远的Hello World 分解的HelloWorld代码 预览函数 先搭建好之后呢,我们就来做第1个例子. 永远的Hello World 先搭建好之后呢,我们就来做第1个例子,编程的第1个例子永远是hello world的,下面呢,我们就来做hello world的例子. 实现hello的例子步骤如下. 创建项目,启动Android Studio工具,新建一个项目,在New Project对话框中Empty Compose Activity,如图所示. 然后点击下一步打开对话框,如图所

  • 使用Jetpack Compose实现翻转卡片效果流程详解

    目录 介绍 执行 ML Kit银行卡识别 输出 结论 如何使用 Jetpack Compose 创建翻转卡片效果 介绍 在电子商务和银行应用程序中输入卡信息是很常见的情况.我认为让用户更轻松地处理这种情况并创建更吸引眼球的 UI 将很有用.大多数应用程序/网站都喜欢它. 执行 在开发阶段,您需要做的是打开一个 Android 项目并实施 Compose 库. 如果我们继续编码,我们可以检查以下 Compose 代码. 您可以根据上面的设计在屏幕上创建您的卡片. @Composable fun A

  • Jetpack Compose按钮组件使用实例详细讲解

    目录 概述 1.普通Button按钮 2.IconButton图标按钮 3.FloatingActionButton悬浮按钮 总结 概述 按钮组件Button是用户和系统交互的重要组件之一,它按照Material Design风格实现,我们先看下Button的参数列表,通过参数列表了解下Button的整体功能 @Composable fun Button( onClick: () -> Unit, // 点击按钮时的回调 modifier: Modifier = Modifier, // 修饰符

  • Jetpack Compose常用组件详细介绍

    目录 1. Text 2. Image 3. LazyColumn 1. Text 日常最常用的应该就是显示文字,所以有必要说一下Text控件.首先源码如下: @Composable fun Text( text: String, modifier: Modifier = Modifier, color: Color = Color.Unspecified, fontSize: TextUnit = TextUnit.Unspecified, fontStyle: FontStyle? = nu

  • 鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码

    一.背景 在采用Java配合xml布局编写鸿蒙app页面的时候,发现sdk自带的Image组件并不能将图片设置成圆形,反复了翻阅了官方API手册(主要查阅了Compont和Image相关的API),起初发现了一个setCornerRadius方法,于是想着将图片宽度和高度设置为一样,然后调用该方法将radios设置为宽度或者高度的一半,以为可以实现圆形图片的效果,后来发现不行.于是乎想着能不能通过继承原有的Image自己来动手重新自定义一个支持圆形的图片组件. 二.思路: 1.对比之前自己在其他

  • MongoDB整合Spring实例详细讲解(含代码)

    写这篇文章也做了下思考,首先是本人技术欠佳.但就是喜欢研究一些东西.因为在此之前有很多的朋友已经写过类似的,很多我也看过,但是讲解的不够深入.对有些朋友提出的问题不能给出答案.在这里,我根据我目前的能力对其进行整理.并最终运行成功. 在测试过程中出现过一下问题: 1.org/springframework/data/mapping/context/MappingContextAware 2.src-resolve: Cannot resolve the name 'repository:repo

  • Jetpack Compose 实现一个图片选择框架功能

    目录 获取图片 拍照策略 NothingCaptureStrategy FileProviderCaptureStrategy MediaStoreCaptureStrategy 总结 拍照权限 取消拍照导致的脏数据 resolveActivity API 的兼容性 File API 的兼容性 Github 知乎的 Matisse应该蛮多 Android 开发者有了解过或者是曾经使用过,这是知乎在 2017 年开源的一个 Android 端图片选择框架,其颜值在现在看来也还是挺不错的 可惜近几年

  • Jetpack Compose布局的使用详细介绍

    目录 一.标准布局组件 二.修饰符 三.滑动组件 1.ScrollableRow和ScrollableColumn 2.LazyRowFor和LazyColumnFor 一.标准布局组件 Compose中可以将多个控件元素组合使用,例如下面这样, @Composable fun WidgetGroup() { Text(text = "不为往事扰") Text(text = "余生只愿笑") } 但是我们会发现,如果仅仅是这样,两个文本控件会重叠在一起,类似于下面这

  • 基于Django框架的权限组件rbac实例讲解

    1.基于rbac的权限管理 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间都是多对多的关系. 简单的模型图示如下: 2.Rbac组件的基本目录结构: 3.按照写的流程,来讲解rbac组件中的各个部分,以及功能, 3.1 models数据库表设计(models.py). 为了在

  • Android开发Jetpack组件Room用例讲解

    目录 一.简介 二.导入 三.使用 3.1 创建 Entity 类 3.2 创建 Dao 类 3.3 创建 Database 抽象类 3.4 测试 四.数据库升级 4.1 简单升级 4.2 规范升级 4.2.1 新增一张表 4.2.2 修改一张表 4.3 测试 一.简介 Room 是 Google 官方推出的数据库 ORM 框架.ORM 是指 Object Relational Mapping,即对象关系映射,也就是将关系型数据库映射为面向对象的语言.使用 ORM 框架,我们就可以用面向对象的思

  • Android超详细讲解组件AdapterView的使用

    目录 概述 介绍AdapterView的编程模式 Adapter ListView使用 myAdapater.java MainActivity.java activity_main.xml myAdapater.java MainActivity.java 概述 在Android应用开发中,AdapterView是一类常用且非常重要的组件.我们常见的以列表的形式显示信息的组件就是AdapterView的子类,称为Listview:我们经常以网格方式浏览图片缩略图的组件也是AdapterView

  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    目录 前言 项目实战 创建项目 启动项目验证 源码分析 选择服务 地址替换 总结 前言 上一篇文章中我们通过自己开发了一个负载均衡组件,实现了随机算法的负载均衡功能,如果要实现其他算法,还需要修改代码增加相应的功能.这一篇文章,我们将介绍一个更简单的负载均衡实现,使用**@LoadBalanced**注解实现负载均衡的功能. 项目实战 创建项目 同样的,我们的项目现在依然有一个registry注册中心,一个provider服务提供者,接下来,我们再次修改一下consumer服务消费者的代码: @

  • Vue组件之间的通信方式详细讲解

    目录 前言 一.父级传数据给子级 1.传输固定的具体数据 2.动态语法 3.子组件调用父组件 二.子级传数据给父级 1.使用自定义事件 2.$refs的使用 3.同级别组价以及任意组件之间的数据传递 前言 在前面,我们已经了解了vue的组件以及vue组件之间的层级关系,这个在博主的往期博客,感兴趣的可以往前挪,地址是: 1.vue组件 2.vue组件的层级关系 本文主要编写记录的是,组件之间的通信的模式以及通信的方式,我们的组件之间只能调用自己的属性和自己的方法,不能调用其他组件的属性以及方法,

随机推荐