四、ArkTS 常用组件-图片(Image)

简介: ArkTS 常用组件-图片(Image)简介:Image 组件用于在应用中显示图片,支持本地和网络图片的加载,提供了多种参数类型如 string、Resource 和 media.PixelMap。常用属性包括图片尺寸设置(width()、height())、图片缩放模式(objectFit())及图片插值(interpolation()),确保图片在不同场景下的最佳显示效果。此外,Image 组件还支持图片资源的灵活引用方式,如通过 $r() 函数引用 resources 目录下的图片资源。

ArkTS 常用组件-图片(Image)

ArkTS 常用组件-图片(Image)概述参数常用属性图片尺寸图片缩放图片插值

概述

Image为图片组件,用于在应用中显示图片。

地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-basic-components-image-V13

参数

**Image**组件的参数类型为string | Resource | media.PixelMap,相关案例见

 Column() {

       // `**Image**`组件的参数类型为`string | Resource | media.PixelMap`

       Button('参数')

       // 使用这种方式引入本地图片,需要将图片置于`ets`目录下,并且需要为`Image`组件提供图片相对于`ets`目录的路径。

       Image('/pages/component/image/no_order.png')

         .width(200).height(200)

       // 网络图片 注意:真机中运行的鸿蒙应用,访问网络图片需要配置网络访问权限,不过在预览器和模拟器中测试时不受限制。

       Image('http://static.tech-harry.cn/typora/a5fb5917ebb0439bb0626489aaa4f1b0.png')

         .width(200).height(200)

       // 可通过`$r('app.media.no_order')`引用

       Image($r('app.media.no_order'))

         .width(200).height(200)

       // 通过`$rawfile('no_order.png')`的方式引用

       Image($rawfile('no_order.png'))

         .width(200).height(200)

     }

  • string类型

string类型的参数用于通过路径的方式引用图片,包括本地图片和网络图片。

  • 本地图片

Image('/pages/component/image/no_order.png')

注意:使用这种方式引入本地图片,需要将图片置于ets目录下,并且需要为Image组件提供图片相对于ets目录的路径。

  • 网络图片

Image('http://static.tech-harry.cn/typora/a5fxxxb0.png')

注意:真机中运行的鸿蒙应用,访问网络图片需要配置网络访问权限,不过在预览器和模拟器中测试时不受限制。权限配置相关的内容在后续章节会系统介绍。

  • **Resource**类型

Resource类型的参数用于引入 resources 目录下的图片。

resources目录下可用于存放图片的目录有resources/*/media 以及 resources/rawfile,两个目录下图片的使用方式有所不同,下面逐一介绍

  • media目录

该目录下的资源,需要使用$r('app.media.<filename>')的方式引用。

注意:无需指定具体版本,系统会自动根据所处环境选择相应版本

示例中的no_order.png图片,可通过Image($r('app.media.no_order'))引用。需要注意的是$r()的返回值即为 **Resource** 类型,因此可以直接将$r('app.media.no_order')作为 Image 组件的参数,例如Image($r('app.media.img'))

  • rawfile目录

该目录下的资源,可通过$rawfile('path/to/your/file')的方式引用,文件的路径为相对于 rawfile 的路径。示例中的no_order.png,须使用$rawfile('no_order.png)引用。需要注意的是,$rawfile()的返回值也是Resource类型,因此其也可以直接作为 Image 组件的参数,如Image($rawfile('no_order.png))

常用属性

图片尺寸

图片尺寸可通过width()方法和height()方法进行设置。例如

 Column() {

   Button('常用属性')

   // 图片尺寸可通过`width()`方法和`height()`方法进行设置

   // `string`类型的参数可为百分比,例如`'100%'`,或者为具体尺寸,例如`'100px'`

   Image($r('app.media.no_order'))

     .width(100)

     .height(100)

 }

两个方法可接收的参数类型均为string | number | Resource

下面对三种参数类型逐一进行介绍。

  • **string**类型

string类型的参数可为百分比,例如'100%',或者为具体尺寸,例如'100px'。具体尺寸的单位,常用的有两个,分别是pxvp

  • **number**类型

number类型的参数,默认以vp作为单位。

  • **Resource**类型

Resource类型参数用于引用resources下的element目录中定义的数值。

引用element目录中的数值,同样需要使用$r()函数。要了解具体语法,需要先熟悉element目录下的文件内容。

图片缩放

当图片的原始大小与Image组件不同时,可通过objectFit()方法来设置图片的显示效果。该方法的参数类型为ImageFit枚举类型,可选的枚举值如下

名称 描述
ImageFit.None 保持原有尺寸显示,不做任何缩放,超出显示区域的部分不显示。
ImageFit.Contain 保持宽高比进行缩小或者放大,使得显示区域刚好包含整个图片。
ImageFit.Cover 保持宽高比进行缩小或者放大,使得图片刚好完全覆盖显示区域。
ImageFit.Fill 不保持宽高比进行放大缩小,使得图片充满显示区域。
ImageFit.ScaleDown 保持宽高比进行缩小或不变(不会放大),使得图片完全显示在显示区域内。
ImageFit.Auto 自适应显示

     Column({ space: 20 }) {

       Column() {

         Button('图片缩放')

         Image($r('app.media.img'))

           .width('730px')

           .height('280px')

         Text('原图')

       }

       Row({ space: 20 }) {

         // `ImageFit.None`保持原有尺寸显示,不做任何缩放,超出显示区域的部分不显示。

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.None)

           Text('ImageFit.None')

         }

         //`ImageFit.Contain`保持宽高比进行缩小或者放大,使得显示区域刚好包含整个图片。

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.Contain)

           Text('ImageFit.Contain')

         }

       }

       Row({ space: 20 }) {

         // `ImageFit.Cover`保持宽高比进行缩小或者放大,使得图片刚好完全覆盖显示区域。

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.Cover)

           Text('ImageFit.Cover')

         }

         // `ImageFit.Fill`不保持宽高比进行放大缩小,使得图片充满显示区域。

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.Fill)

           Text('ImageFit.Fill')

         }

       }

       Row({ space: 20 }) {

         // `ImageFit.ScaleDown`保持宽高比进行缩小或不变(不会放大),使得图片完全显示在显示区域内。

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.ScaleDown)

           Text('ImageFit.ScaleDown')

         }

         // `ImageFit.Auto`自适应显示

         Column() {

           Image($r('app.media.img'))

             .width('450px')

             .height('450px')

             .borderWidth(1)

             .objectFit(ImageFit.Auto)

           Text('ImageFit.Auto')

         }

       }

     }

各选项的效果如下图所示

图片插值

当原图分辨率较低并且需要放大显示时,图片会模糊并出现锯齿。如下图所示

这时可以使用interpolation()方法对图片进行插值,使图片显示得更清晰。该方法的参数为ImageInterpolation枚举类型,可选的值有

名称 描述
ImageInterpolation.None 不使用图片插值。
ImageInterpolation.High 高质量插值,可能会影响图片渲染的速度。
ImageInterpolation.Medium 中等质量插值。
ImageInterpolation.Low 低等质量插值。

Column({ space: 20 }) {

       Column() {

         Button('图片插值')

         Text('原图分辨率 40px*40px')

         Row() {

           Column() {

             Image($r('app.media.interpolation'))

               .width(100)

               .height(100)

               .interpolation(ImageInterpolation.None)

             Text('None')

           }

           Column() {

             Image($r('app.media.interpolation'))

               .width(100)

               .height(100)

               .interpolation(ImageInterpolation.Low)

             Text('Low')

           }

         }

         Row() {

           Column() {

             Image($r('app.media.interpolation'))

               .width(100)

               .height(100)

               .interpolation(ImageInterpolation.Medium)

             Text('Medium')

           }

           Column() {

             Image($r('app.media.interpolation'))

               .width(100)

               .height(100)

               .interpolation(ImageInterpolation.High)

             Text('High')

           }

         }

       }

     }

各选项效果如下图所示

关注我,公众号搜“Harry技术”带你看不一样的人间烟火!

目录
相关文章
|
开发者 UED
ArkTS响应式刷新问题高级用法
本文详细介绍了ArkTS中响应式刷新的高级用法,涵盖Refresh组件的使用、状态管理、条件渲染及精准控制组件刷新。通过实例讲解了Refresh组件的触发条件、事件处理、常用属性,以及如何利用@State、@Link和@Watch装饰器优化状态管理和组件刷新,帮助开发者构建高效、可维护的HarmonyOS应用。
856 0
五、ArkTS 常用组件-文本显示 (Text / Span)
本文档介绍了ArkTS中的文本显示组件(Text/Span),包括其基本概念、参数设置、常用属性(如字体大小、粗细、颜色、对齐方式)、最大行数及超长处理方法,以及子组件Span的使用方法。Text组件支持多种参数类型,包括字符串、资源引用等,并提供了丰富的属性设置选项以满足不同的文本显示需求。Span组件则主要用于在Text组件内部实现更精细的文本格式化,如设置不同的字体颜色、大小、装饰线等,同时支持点击事件的添加。
863 2
|
12月前
|
数据安全/隐私保护 开发者
六、ArkTS 常用组件-按钮(Button)/切换按钮(Toggle)/文本输出(TextInput)
`Button` 组件是 HarmonyOS 应用开发中的基本组件之一,主要用于响应用户的点击操作。它支持两种使用方式:不包含子组件和包含子组件。不包含子组件时,`Button` 通过 `label` 属性设置按钮上的文字,同时提供 `options` 参数来配置按钮类型和点击效果;包含子组件的方式则允许更灵活的内容展示,如图片或复杂布局,此时无需设置 `label`。此外,`Button` 组件还提供了设置背景颜色、边框圆角等样式的方法,以及绑定点击事件的功能,使开发者能够轻松实现丰富的交互体验。
784 0
六、ArkTS 常用组件-按钮(Button)/切换按钮(Toggle)/文本输出(TextInput)
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
1037 2
|
开发框架 前端开发 开发工具
一个小案例带你快速了解鸿蒙ArkUI的基本使用
一个小案例带你快速了解鸿蒙ArkUI的基本使用
812 124
|
UED 开发者 容器
鸿蒙next版开发:ArkTS组件通用属性(布局约束)
在HarmonyOS next中,ArkTS提供了一系列通用属性来设置组件的布局约束,使开发者能够灵活控制组件的布局行为。本文详细解读了这些属性,包括`space`、`justifyContent`、`alignItems`、`layoutWeight`、`matchParent`和`wrapContent`,并通过示例代码展示了它们的使用方法。这些属性有助于实现响应式布局、动态界面调整和提升用户体验。
608 5
|
开发者 容器
鸿蒙next版开发:ArkTS组件通用属性(文本通用)
在HarmonyOS 5.0中,ArkTS提供了丰富的文本通用属性,如textAlign、maxLines、textOverflow、fontSize、fontColor、fontStyle、fontWeight、fontFamily、lineHeight、letterSpacing和decoration等,用于实现多样的文本显示和样式效果。本文详细解读了这些属性,并提供了示例代码,帮助开发者更好地利用这些工具,提升应用界面的美观和实用性。
850 8
|
12月前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
520 8
|
API UED 开发者
鸿蒙next版开发:ArkTS组件通用属性(透明度设置)
在HarmonyOS 5.0中,ArkTS引入了透明度设置属性`opacity`,允许开发者自定义组件的透明度,从而创建复杂的视觉效果和提升用户体验。本文详细解读了`opacity`属性的用法,并提供了示例代码,展示了如何在不同透明度下展示组件。透明度设置在UI开发中具有多种用途,如创建重叠效果、增强美观性和实现动画效果。
1173 7
|
12月前
|
人工智能 数据可视化 API
自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践
本文介绍了使用HarmonyOS的Calendar Kit开发日程管理应用的过程。通过API 13版本,不仅实现了创建、查询、更新和删除日程等基础功能,还深入探索了权限请求、日历配置、事件添加及查询筛选等功能。实战项目中,开发了一个智能日程管理工具,具备可视化管理、模糊查询和智能提醒等特性。最终,作者总结了模块化开发的优势,并展望了未来加入语音助手和AI推荐功能的计划。
866 1