鸿蒙开发-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. 存档图类型数据源

鸿蒙开发-UI-图形-图片_第1张图片

2.多媒体像素图

鸿蒙开发-UI-图形-图片_第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) 鸿蒙开发-UI-图形-图片_第3张图片
interpolation(ImageInterpolation.Low) 鸿蒙开发-UI-图形-图片_第4张图片
interpolation(ImageInterpolation.Medium) 鸿蒙开发-UI-图形-图片_第5张图片
interpolation(ImageInterpolation.High) 鸿蒙开发-UI-图形-图片_第6张图片

3.设置图片重复样式

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

Image组件objectRepeat取值 显示说明 显示效果
objectRepeat(ImageRepeat.XY) 在水平轴和竖直轴上同时重复绘制图片 鸿蒙开发-UI-图形-图片_第7张图片
objectRepeat(ImageRepeat.Y) 只在竖直轴上重复绘制图片 鸿蒙开发-UI-图形-图片_第8张图片
objectRepeat(ImageRepeat.X) 只在水平轴上重复绘制图片 鸿蒙开发-UI-图形-图片_第9张图片

4.设置图片渲染模式

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

Image组件renderMode取值 显示说明 显示效果
renderMode(ImageRenderMode.Original) 设置图片的渲染模式为原色 鸿蒙开发-UI-图形-图片_第10张图片
renderMode(ImageRenderMode.Template) 设置图片的渲染模式为黑白 鸿蒙开发-UI-图形-图片_第11张图片

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渲染

鸿蒙开发-UI-图形-图片_第12张图片

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-图形-图片_第13张图片


总结

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

你可能感兴趣的:(鸿蒙开发,harmonyos,ui,华为)