当前位置: 首页 > article >正文

鸿蒙开发-UI-图形-图片

鸿蒙开发-UI-组件

鸿蒙开发-UI-组件2

鸿蒙开发-UI-组件3

鸿蒙开发-UI-气泡/菜单

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件导航-Navigation

鸿蒙开发-UI-组件导航-Tabs

文章目录

一、基本概念

二、图片资源加载

1. 存档图类型数据源

2.多媒体像素图

三、显示矢量图

四、图片显示相关属性

1.设置图片缩放类型

2.图片插值

3.设置图片重复样式

4.设置图片渲染模式

5.设置图片解码尺寸

6.为图片添加滤镜效果

7.同步加载图片

五、图片显示相关事件

总结


前言

上文详细学习了组件导航组件Tabs的使用场景,以及不同的导航布局方式,同时也学习了导航栏的使用模式(固定,滚动)以及自定义导航栏的使用。本文学习鸿蒙开发UI图形显示相关知识

一、基本概念

 图片显示需要使用Image组件,支持多种图片格式,包括png、jpg、bmp、svg和gif

Image通过调用如下接口来创建

Image(src: string | Resource | media.PixelMap)

二、图片资源加载

Image支持加载存档图、多媒体像素图两种类型

1. 存档图类型数据源

2.多媒体像素图

三、显示矢量图

Image组件可显示矢量图(svg格式的图片)

svg格式的图片可以使用fillColor属性改变图片的绘制颜色

Image($r('app.media.cloud')).width(50)
.fillColor(Color.Blue) 
原始图片颜色设置绘制颜色后的svg图片

四、图片显示相关属性

Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果

1.设置图片缩放类型

Image组件objectFit取值显示说明
objectFit(ImageFit.Contain)保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内
objectFit(ImageFit.Cover)保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界
objectFit(ImageFit.Auto)自适应显示
objectFit(ImageFit.Fill)不保持宽高比进行放大缩小,使得图片充满显示边界
objectFit(ImageFit.ScaleDown)保持宽高比显示,图片缩小或者保持不变
objectFit(ImageFit.None)保持原有尺寸显示

2.图片插值

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

使用interpolation属性对图片进行插值,使图片显示得更清晰

Image组件interpolation取值显示效果
interpolation(ImageInterpolation.None)
interpolation(ImageInterpolation.Low)
interpolation(ImageInterpolation.Medium)
interpolation(ImageInterpolation.High)

3.设置图片重复样式

通过objectRepeat属性设置图片的重复样式方式

Image组件objectRepeat取值显示说明显示效果
objectRepeat(ImageRepeat.XY)在水平轴和竖直轴上同时重复绘制图片
objectRepeat(ImageRepeat.Y)只在竖直轴上重复绘制图片
objectRepeat(ImageRepeat.X)只在水平轴上重复绘制图片

4.设置图片渲染模式

通过renderMode属性设置图片的渲染模式为原色或黑白

Image组件renderMode取值显示说明显示效果
renderMode(ImageRenderMode.Original)设置图片的渲染模式为原色
renderMode(ImageRenderMode.Template)设置图片的渲染模式为黑白

5.设置图片解码尺寸

通过sourceSize属性设置图片解码尺寸,降低图片的分辨率

//将原图片解码为150*150
Image($r('app.media.example'))
          .sourceSize({
            width: 150,
            height: 150
          })

6.为图片添加滤镜效果

通过colorFilter修改图片的像素颜色,为图片添加滤镜

代码示例

@Entry
@Component
struct Index {
  build() {
    Column() {
      Row() {
        Image($r('app.media.example'))
          .width('40%')
          .margin(10)
        Image($r('app.media.example'))
          .width('40%')
          .colorFilter(
            [1, 1, 0, 0, 0,
             0, 1, 0, 0, 0,
             0, 0, 1, 0, 0,
             0, 0, 0, 1, 0])
          .margin(10)
      }.width('100%')
      .justifyContent(FlexAlign.Center)
    }
  }
}

UI渲染

7.同步加载图片

一般情况下,图片加载流程会异步进行,以避免阻塞主线程,影响UI交互。但是特定情况下,图片刷新时会出现闪烁,这时可以使用syncLoad属性,使图片同步加载,从而避免出现闪烁。

注:如果图片加载较长时间导致页面无法响应场景,不建议使用同步加载

Image($r('app.media.icon'))
  .syncLoad(true)

五、图片显示相关事件

Image组件上绑定onComplete事件,图片加载成功后可以获取图片的必要信息。如果图片加载失败,也可以通过绑定onError回调来获得结果

代码示例

@Entry
@Component
struct MyComponent {
  @State widthValue: number = 0
  @State heightValue: number = 0
  @State componentWidth: number = 0
  @State componentHeight: number = 0

  build() {
    Column() {
      Row() {
        Image($r('app.media.ic_img_2'))
          .width(200)
          .height(150)
          .margin(15)
//step1:定义图片加载完成后,获取图片的相关属性
          .onComplete(msg => {
            if(msg){
              this.widthValue = msg.width
              this.heightValue = msg.height
              this.componentWidth = msg.componentWidth
              this.componentHeight = msg.componentHeight
            }
          })
//step2:定义图片获取失败,打印结果
          .onError(() => {
            console.info('load image fail')
          })
//step3:通过状态变量获取图片属性数据,图片加载完成状态变量数据变更,Image组件重新渲染
          .overlay('width: ' + String(this.widthValue) + ', height: ' + String(this.heightValue) + 'componentWidth: ' + String(this.componentWidth) + 'componentHeight: ' + String(this.componentHeight), {
            align: Alignment.Bottom,
            offset: { x: 0, y: 60 }
          })
      }
    }
  }
}

UI渲染


总结

本文详细学习了鸿蒙开发UI图片显示相关知识,学习了图片资源加载的两种类型,以及矢量图的显示,同时学习了图片渲染组件的相关属性和相关事件的使用方式和效果。下文将学习鸿蒙开发UI图形绘制。


http://www.kler.cn/a/233835.html

相关文章:

  • 前端Cypress自动化测试全网详解
  • 985研一学习日记 - 2024.11.12
  • vue elementui el-dropdown-item设置@click无效的解决方案
  • Linux——基础指令2 + 权限
  • 【论文阅读】利用SEM二维图像表征黏土矿物三维结构
  • linux详解,基本网络枚举
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Toggle组件
  • MySQL进阶查询篇(3)-查询性能优化的常见技巧
  • C#系列-C#操作UDP发送接收数据(10)
  • C++入门篇(4)—— 类与对象(1)
  • Spring Boot 实现热插拔 AOP
  • 【机器学习】Ubuntu系统下CUDA驱动卸载及重装
  • 上线GPT应用的流程
  • 【北邮鲁鹏老师计算机视觉课程笔记】03 edge 边缘检测
  • 深入浅出:Golang的Crypto/SHA256库实战指南
  • Linux第45步_通过搭建“DNS服务器”学习图形化配置工具
  • conda创建环境,查看环境,激活环境,查看包,复制环境,删除环境,查看cuda版本,查看pytorch版本
  • 蓝桥杯官网练习题(翻转)
  • ubuntu22.04@laptop OpenCV Get Started: 006_annotating_images
  • Nginx管理配置中多种变量学习
  • 梯度提升树系列7——深入理解GBDT的参数调优
  • 【漏洞复现】狮子鱼CMS某SQL注入漏洞01
  • redis双写一致
  • Deepin基本环境查看(八)【系统安全:房、车、查房、查车】
  • 2.9日学习打卡----初学RabbitMQ(四)
  • Unity报错Currently selected scripting backend (IL2CPP) is not installed