鸿蒙UI开发——组件裁剪与遮罩

ops/2024/12/19 11:28:53/

1、概 述

ArkUI为组件提供了裁剪和遮罩功能,我们可以实现更多样话的UI效果。下面针对裁剪和遮罩功能做介绍。

2、裁 剪

裁剪分为两种:1、父容器对子组件进行裁剪;2、直接对组件进行裁剪。

2.1、 父容器对子容器进行裁剪

如果我们希望子组件不超出父容器,超出部分做裁剪处理,可以使用此能力,接口定义如下:

// 是否对当前组件的子组件进行裁剪。默认值falseclip(value: boolean)

一个裁剪效果如下:

图片

代码如下(11 ~ 12行):

// xxx.ets@Entry@Componentstruct Index {  build() {    Column({ space: 15 }) {      Text('clip').fontSize(12).width('75%').fontColor('#DCDCDC')      Row() {        Image($r('app.media.harmony_class_room')).width('500px').height('280px')      }      .clip(true) // 如这里不设置clip为true,则Row组件的圆角不会限制其中的Image组件,Image组件的四个角会超出Row      .borderRadius(20)    }    .width('100%')    .margin({ top: 15 })  }}

2.2、 直接对组件进行裁剪

如果我们有组件想直接对其进行裁剪效果处理,可以考虑使用此能力,接口定义如下:​​​​​​​

// 按指定的形状对当前组件进行裁剪。clipShape(value: CircleShape | EllipseShape | PathShape | RectShape)

当前形状支持四种,分别定义如下:​​​​​​​

struct ShapeSize {   width: number | string,  //  形状的宽度。   height: number | string, //   形状的高度。}struct CircleShape {   options: ShapeSize;}struct EllipseShape {   options: ShapeSize;}struct PathShape {   options: PathShapeOptions; // 结构定义如下}struct PathShapeOptions {   commands: string // 绘制路径的指令。}struct RectShape {    // 矩形形状参数。   options: RectShapeOptions | RoundRectShapeOptions}struct RectShapeOptions extends ShapeSize {   // 矩形形状的圆角半径。   radius: number | string | Array<number | string>}struct RoundRectShapeOptions extends ShapeSize {   radiusWidth: number | string, //  矩形形状圆角半径的宽度。   radiusHeight: number | string, //  矩形形状圆角半径的高度。}

一个裁剪效果如下:

图片

代码如下(10行):​​​​​​​​​​​​​​

// xxx.ets@Entry@Componentstruct Index {  build() {    Column({ space: 15 }) {      Text('clip').fontSize(12).width('75%').fontColor('#DCDCDC')      // 用一个280px直径的圆对图片进行裁剪      Image($r('app.media.harmony_class_room'))        .clipShape(new Circle({ width: '280px', height: '280px' }))        .width('500px').height('280px')    }    .width('100%')    .margin({ top: 15 })  }}

3、遮罩

遮罩主要涉及以下几个API:

3.1、 为组件添加可调节进度的遮罩

接口定义如下:​​​​​​​

 // 为组件上添加可调节进度的遮罩。ProgressMask用于设置遮罩的进度、最大值和遮罩颜色。mask(value: ProgressMask)// ProgressMask定义如下:class ProgressMask {   value: number, // 进度遮罩的当前值。   total: number, // 进度遮罩的最大值。   color: ResourceColor, // 进度遮罩的颜色。   constructor(value: number, total: number, color: ResourceColor);      // 一些更新方法   updateProgress(value: number): void;   updateColor(value: ResourceColor): void;   // 进度满时的呼吸光晕动画开关。默认关闭呼吸光晕动画。   enableBreathingAnimation(value: boolean): void;}

一个示例效果如下(请注意达到100%时的展开动画,以及重置回去时的效果):

代码如下:​​​​​​​

import { RectShape } from '@kit.ArkUI';@Entry@Componentstruct ProgressMaskExample {  @State progressflag1: boolean = true;  @State color: Color = 0x01006CDE;  @State value: number = 10.0;  @State enableBreathingAnimation: boolean = false;  @State progress: ProgressMask = new ProgressMask(10.0, 100.0, Color.Gray);  build() {    Column({ space: 15 }) {      Text('progress mask').fontSize(12).width('75%').fontColor('#DCDCDC')      // 给图片添加了一个280px*280px的进度遮罩      Image($r('app.media.harmony_class_room'))        .width('500px')        .height('280px')        .mask(this.progress)        .animation({          duration: 1000, // 动画时长          curve: Curve.Linear, // 动画曲线          delay: 0, // 动画延迟          iterations: 1, // 播放次数          playMode: PlayMode.Normal // 动画模式        }) // 对Button组件的宽高属性进行动画配置      // 更新进度遮罩的进度值      Button('updateProgress')        .onClick(() => {          this.value += 10;          this.progress.updateProgress(this.value);        }).width(200).height(50).margin(20)      // 更新进度遮罩的颜色      Button('updateColor')        .onClick(() => {          if (this.progressflag1) {            this.progress.updateColor(Color.Red);          } else {            this.progress.updateColor(Color.Gray);          }          this.progressflag1 = !this.progressflag1        }).width(200).height(50).margin(20)      // 开关呼吸光晕动画      Button('enableBreathingAnimation:' + this.enableBreathingAnimation)        .onClick(() => {          this.enableBreathingAnimation = !this.enableBreathingAnimation          this.progress.enableBreathingAnimation(this.enableBreathingAnimation);        }).width(200).height(50).margin(20)      // 恢复进度遮罩      Button('click reset!')        .onClick((event?: ClickEvent) => {          this.value = 0;          this.progress.updateProgress(this.value);        }).width(200).height(50).margin(20)    }    .width('100%')    .margin({ top: 15 })  }}

3.2、 为组件添加指定形状的遮罩

接口定义如下:​​​​​​​

// 为组件上添加指定形状的遮罩。// 其中CircleShape | EllipseShape | PathShape | RectShape在前文中有介绍maskShape(value: CircleShape | EllipseShape | PathShape | RectShape)

一个示例效果如下:

图片

代码如下:​​​​​​​

@Entry@Componentstruct ClipAndMaskExample {  build() {    Column({ space: 15 }) {      Text('mask').fontSize(12).width('75%').fontColor('#DCDCDC')      // 给图片添加了一个500px*280px的方形遮罩      Image($r('app.media.harmony_class_room'))        .maskShape(new Rect({ width: '500px', height: '280px' }).fill('#ff0000'))        .width('500px').height('280px')      // 给图片添加了一个500px*280px的方形遮罩      Image($r('app.media.harmony_class_room'))        .maskShape(new Rect({ width: '500px', height: '280px', radius: '60px' }).fill('#00ff00'))        .width('500px').height('280px')      // 给图片添加了一个280px*280px的圆形遮罩      Image($r('app.media.harmony_class_room'))        .maskShape(new Circle({ width: '280px', height: '280px' }).fill('#0000ff'))        .width('500px').height('280px')    }    .width('100%')    .margin({ top: 15 })  }}

http://www.ppmy.cn/ops/143167.html

相关文章

AFP-X_PLC COM串口通讯

AFP-X_PLC COM串口通讯 通信串口COM参数一定要保持一致&#xff01; 通信串口COM参数一定要保持一致&#xff01; 通信串口COM参数一定要保持一致&#xff01; %01#RCP2R0001R0010**<CR>&#xff0c; 01代表站址&#xff0c;2代表读取个数&#xff0c; R0001、R0010代…

【从零开始入门unity游戏开发之——C#篇16】C#什么是面向对象编程?

文章目录 一、面向对象编程1、面向对象编程简介2、为什么要学习面向对象编程&#xff1f;3、面向对象的关键概念4、面向对象的三大特性5、总结 二、面向对象编程&#xff08;OOP&#xff09;和面向过程编程&#xff08;POP&#xff09;1、面向对象编程&#xff08;OOP&#xff…

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

海外媒体宣发对品牌出海的多维影响-大舍传媒

海外媒体宣发对品牌出海的多维影响 一、海外媒体宣发有助于品牌海外 SEO 海外媒体发稿是重要的海外公共关系工具&#xff0c;对于品牌想在海外宣传并引起关注具有重要作用。有效的新闻稿发布能够提高品牌的 SEO 排名&#xff0c;因为发布的新闻媒体网站的谷歌 PR 通常较高&…

多表查询的分类与实现

可能会出现的错误&#xff1a; 笛卡尔积的错误会在下面条件下产生&#xff1a; 省略多个表的连接条件&#xff08;或关联条件&#xff09; 连接条件&#xff08;或关联条件&#xff09;无效 所有表中的所有行互相连接 如何避免&#xff1a; 可以在 WHERE 加入有效的连接条…

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

灵当crm pdf.php存在任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…