鸿蒙应用开发:6种图片加载方式详解

这是一个使用鸿蒙技术开发的本地原生记账应用,非常适合大家用来练手。相关源码已上传至 Github,点击此处查看项目。欢迎大家交流、指正,也欢迎提交 PR。

一、引言

在鸿蒙应用开发中,图片是构建用户界面不可或缺的元素。本文将详细介绍在HarmonyOS中加载图片的6种方式,从最常用的网络图片和本地自定义目录图片,到系统提供的media、rawfile、系统内置图片以及字体图标图片,帮助开发者全面掌握Image组件的用法。

二、准备工作

首先,我们新建一个空页面。在day01文件夹下右键选择"新建" -> "页面",创建一个空页面并命名。将页面中的实例代码删除,然后添加Image组件的相关代码。

三、加载网络图片

加载网络图片是最常见的需求。使用Image组件时,只需传递网络图片的URL即可。

typescript 复制代码
Image('https://example.com/image.png')
  .width(200) // 设置图片宽度

通过.width()可以设置图片的显示宽度,网络图片即可成功显示。

四、加载自定义目录图片

第二种方式是加载项目自定义目录中的图片。同样,只需给Image组件传递图片路径。

typescript 复制代码
Image('/static/logo.png')
  .width(200)

操作步骤:

  1. 在ets目录下右键选择"新建" -> "目录"。
  2. 给目录命名,例如static。
  3. 将你的图片文件放入该目录中。

五、加载media目录图片

鸿蒙的resources目录下,base子目录中有一个media文件夹,专门用于存放媒体资源。

5.1 media目录说明

resources/base/media目录下的资源文件会被编译成二进制文件,并赋予资源文件ID。

5.2 加载方式

使用$r()语法来引用media目录中的图片:

typescript 复制代码
Image($r('app.media.my_image'))
  .width(200)

在$r()中输入app.media.后,IDE会自动列出该文件夹下的所有图片资源,选中即可。

六、加载rawfile目录图片

rawfile目录与base目录平级,位于resources/rawfile下。

6.1 rawfile目录说明

  • 可以创建多层子目录。
  • 文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。

6.2 加载方式

使用$rawfile()函数来引用:

typescript 复制代码
Image($rawfile('icon.png'))
  .width(200)

直接在括号内输入图片的文件名(含扩展名)即可。

七、加载系统内置图片

鸿蒙系统内置了一些默认图片资源,方便开发者快速使用。

typescript 复制代码
Image($r('sys.media.ohos_app_icon'))
  .width(200)

使用$r(),输入sys.media.后,IDE会列出系统内置的所有图片,选择即可。

八、加载字体图标图片

字体图标库(如SVG图标)通常也放在media目录中加载。

8.1 加载方式

typescript 复制代码
Image($r('app.media.icon_svg'))
  .width(200)

8.2 注意事项

  • 文件名不要包含中文或其他特殊符号,否则可能报错。
  • 建议使用拼音或英文命名,如果图片默认使用的中文,可通过右键"重构" -> "重命名"修改。

8.3 修改填充色

对于SVG格式的图片,还可以使用fillColor属性修改其填充颜色:

typescript 复制代码
Image($r('app.media.icon_svg'))
  .width(200)
  .fillColor(Color.Red) // 修改为红色

9. 总结

本文介绍了鸿蒙应用中加载图片的6种方式:

加载方式 关键API 适用场景
网络图片 Image('url') 加载远程资源
自定义目录 Image('/path') 加载项目内自定义资源
media目录 $r('app.media.xxx') 需要资源ID管理的场景
rawfile目录 $rawfile('name') 需要保持文件原始格式
系统内置 $r('sys.media.xxx') 快速使用系统默认图标
字体图标 $r('app.media.xxx') + fillColor 图标库应用

掌握这些方法,你就能在鸿蒙应用中灵活处理各种图片加载需求了。有兴趣的小伙伴可以动手练一练!

相关推荐
拆房老料5 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
yumgpkpm5 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Solis程序员5 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明5 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8886 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖7 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34537 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水7 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天8 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css