HarmonyOS实战—Image组件的剪切和缩放

开发 前端 OpenHarmony
本篇主要介绍运用HarmonyOS来实现Image组件的剪切和缩放,图片(Image)是用来显示图片的组件。常见的属性有id,长、宽、高等。

[[419300]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

1. Image图片标签

概述:图片(Image)是用来显示图片的组件。

常见的属性:id,长、宽、高等。

具体可以参考华为开发手册(组件的通用属性):

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-common-xml-0000001138483639

比较重要的属性:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区
HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

蓝色的区域就是背景图片

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

如果image标签比较大,而要展示的图片比较小,前景图片就盖不住背景图片,背景图片就会展示出来。

工作当中,关于image标签有两个习惯:

大小会包裹内容,图片多大,image标签多大

image标签基本不会设置背景图片,只会设置前景图片,因为前景图片才是要展示出来的图片

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

新建项目:ImageApplication

  1. <Image 
  2.          ohos:height="1000px" 
  3.          ohos:width="1000px" 
  4.          ohos:image_src="$media:girl1" 
  5.          ohos:background_element="#0000FF" 
  6.      /> 

使用的girl图片如下,可下载自取

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

girl图片信息:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

运行,会发现蓝色区域其实就是image标签,里面的girl就是展示的前景图片,默认情况是不剪切、不缩放的形式展示,把展示的图片直接放在image正中间HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

2. 图片剪切 clip_alignment

查看girl图片信息

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

把宽高改为100px,因为image标签要比真实图片小的时候,才需要剪切

  1. <Image 
  2.    ohos:height="100px" 
  3.    ohos:width="100px" 
  4.    ohos:image_src="$media:girl1" 
  5.    ohos:background_element="#0000FF" 
  6.    ohos:clip_alignment="center" 
  7.    /> 

运行:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

发现只把中间的一小部分显示出来了,并且宽高大小均为100px

所以,ohos:clip_alignment="center"表示把图片中间和部分进行剪切,然后再展示出来

ohos:clip_alignment="left",表示剪切左边的部分,其他属性以此类推

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

ohos:clip_alignment="left|top"表示剪切左上部分图片

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

3. 缩放图片 scale_mode

使用的飞机图片如下,可下载自取

[[419308]]

飞机图片的信息

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区
  1. <Image 
  2.     ohos:height="500px" 
  3.     ohos:width="500px" 
  4.     ohos:image_src="$media:plane" 
  5.     ohos:background_element="#0000FF" 
  6.     /> 

默认不剪切、不缩放,就是把图片放在正中间

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

ohos:scale_mode="inside":表示将图片按比例缩放到跟image相同的或更小的尺寸并居中展示,但有可能不会填充整个组件

如:把图片宽高改为 300px

  1. <Image 
  2.         ohos:height="300px" 
  3.         ohos:width="300px" 
  4.         ohos:image_src="$media:plane" 
  5.         ohos:background_element="#0000FF" 
  6.         ohos:scale_mode="inside" 
  7.         /> 
HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

可以看到缩小了,把原图等比例缩小了。是跟image相同的或更小的尺寸并居中展示。

改为ohos:scale_mode="center":表示不缩放,按照image大小来展示原图中间的那一部分

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

改为ohos:scale_mode="stretch":表示拉伸,会把整个image拉伸铺满。缩小后会把整个image铺满

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

宽高改为1000px,改为ohos:scale_mode="zoom_center",:表示把原图等比例放大,放大到跟窄边一致的时候(也就是说:在放大的时候,只要这个图片已经铺满了其中一边,那么他是铺满了横向的宽度,所以就不会再缩放了,然后再居中显示)

  1. <Image 
  2.        ohos:height="1000px" 
  3.        ohos:width="1000px" 
  4.        ohos:image_src="$media:plane" 
  5.        ohos:background_element="#0000FF" 
  6.        ohos:scale_mode="zoom_center" 
  7.        /> 
HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

改为ohos:scale_mode="zoom_start":放大后只会在上面显示,如:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

改为ohos:scale_mode="zoom_end":放大后只会在下面显示,如:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

4. zoom_center 和 inside 区别:

当image比较大时,要展示的图片比较小时,inside 不会进行放大的,只能缩小。

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

而 zoom_center 就会把原图放大

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

5. 小节

1、图片剪切显示:

代码中:可以用setClipGravity方法

xml文件中:可以用clip_alignment属性,上、下、左、右、居中,分别表示按照上、下、左、右、中间部位进行剪切。

2、图片缩放显示:

代码中:可以用setScaleMode方法

xml文件中:可以用scale_mode属性

inside:表示将原图按比例缩放到与Image相同或更小的尺寸,并居中显示。 有可能不会填充组件

center:表示不缩放,按Image大小显示原图中间部分。

stretch:表示将原图缩放到与Image大小一致。 拉伸。将组件填充。

clip_center:表示将原图按比例缩放到与Image相同或更大的尺寸,并居中显示。超过组件的部分被剪切掉。

zoom_center:表示原图按照比例缩放到与Image最窄边一致,并居中显示。

zoom_end:表示原图按照比例缩放到与Image最窄边一致,并靠结束端显示。

zoom_start:表示原图按照比例缩放到与Image最窄边一致,并靠起始端显示。

相关方法:

HarmonyOS实战—Image组件的剪切和缩放-鸿蒙HarmonyOS技术社区

3、 实际开发当中,尽量不剪切、也不缩放,因为剪切或缩放了,就有可能导致图片失帧。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-09-13 15:17:28

鸿蒙HarmonyOS应用

2021-09-06 15:31:01

鸿蒙HarmonyOS应用

2021-08-19 14:47:47

鸿蒙HarmonyOS应用

2021-01-21 09:45:36

鸿蒙HarmonyOS分布式

2021-08-11 09:32:12

鸿蒙HarmonyOS应用

2021-06-17 14:56:00

鸿蒙HarmonyOS应用

2021-01-16 12:21:59

react-dragareact-resia可视化

2021-07-05 14:29:28

鸿蒙HarmonyOS应用

2021-11-02 14:54:21

鸿蒙HarmonyOS应用

2021-09-27 10:43:18

鸿蒙HarmonyOS应用

2009-09-01 10:35:59

C# WinForm控

2023-11-07 18:03:31

Vim复制粘贴

2021-05-24 06:20:04

Linuxsed命令

2024-05-23 08:05:04

2023-03-29 08:35:11

RMANBackupSets

2021-09-27 14:44:48

鸿蒙HarmonyOS应用

2020-10-12 19:50:30

TCP窗口时间戳SACK

2020-12-21 08:42:40

NettyByteBuf网络技术

2021-08-06 14:35:26

鸿蒙HarmonyOS应用

2023-11-10 15:29:28

GIMP图像
点赞
收藏

51CTO技术栈公众号