【HarmonyOS NEXT】实现页面水印功能

devtools/2024/10/18 17:51:46/

关键词:鸿蒙、水印、Watermark、页面、触摸问题

注:本期文章同样适用 OpenHarmony 的开发

在app开发过程中时常会出现敏感信息页面,为保护信息安全和及时的数据追踪,通常会采用给页面加水印的形式,那么本期文章会介绍如何在鸿蒙应用中实现页面水印的功能。

本期文章代码比较简单,核心逻辑为 ①对触摸事件的穿透控制②组件 .overlay() 浮层的使用,可自行修改 Watermark() 构建函数代码调整至自己业务所适合的样式。

触摸测试控制可参考官方文档:文档中心

效果如下:

完整代码:

如下代码使用 Canvas 画布绘制水印,计算当前屏幕展示水印个体个数进行渲染。当然也可以自行使用网格或其他布局实现效果。overlay 浮层也可替换使用 Stack() 层叠布局,本质在上方覆盖一层文本浮层即可。

需要注意的是:浮层是在跟容器组件的上层,所以需要给上层组件设置 .hitTestBehavior(HitTestMode.Transparent) 属性,穿透触摸事件至根容器,避免触摸事件被水印层拦截。

@Entry
@Component
struct Index {@State message: string = '你好鸿蒙 Hello Harmony,这是一段普通文本测试水印效果';private settings: RenderingContextSettings = new RenderingContextSettings(true);private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);// 水印容器宽高private water1wh: number = 140/*** 水印构造器* @param waterText 水印文本* @param fontSize 字号* @param fontColor 颜色*/@BuilderWatermark2(waterText: string, fontSize: string, fontColor: string) {Canvas(this.context).width("100%").height("100%")// 设置触摸测试控制,不影响跟节点触摸.hitTestBehavior(HitTestMode.Transparent).onReady(() => {this.context.fillStyle = fontColor;this.context.font = fontSize;this.context.textAlign = "center"; // 单个容器中垂直居中// 计算屏幕中可摆放多少个水印个体,遍历渲染for (let i = 0; i < this.context.width / this.water1wh; i++) {this.context.translate(this.water1wh, 0);let j = 0;for (; j < this.context.height / this.water1wh; j++) {this.context.rotate(-Math.PI / 180 * 30);// 设置文本偏移this.context.fillText(waterText, -(this.water1wh / 2), -(this.water1wh / 2));this.context.rotate(Math.PI / 180 * 30);this.context.translate(0, this.water1wh);}this.context.translate(0, -this.water1wh * j);}})}build() {// overlay 浮层用法RelativeContainer() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).id("Text1").onClick(() => {console.log("luvi > 触摸测试")}).alignRules({middle: { anchor: "__container__", align: HorizontalAlign.Center },center: { anchor: "__container__", align: VerticalAlign.Center }}).id("base")}// 在当前组件上,增加叠加自定义组件以作为该组件的浮层.overlay(this.Watermark2("20241012 张三", "15vp", "#2a000000")).height('100%').width('100%')// 层叠布局用法// Stack() {//   RelativeContainer() {//     Text(this.message)//       .fontSize(50)//       .fontWeight(FontWeight.Bold)//       .id("Text1")//       .onClick(() => {//         console.log("luvi > 触摸测试")//       })//       .alignRules({//         middle: { anchor: "__container__", align: HorizontalAlign.Center },//         center: { anchor: "__container__", align: VerticalAlign.Center }//       })//       .id("base")//   }//   .height('100%')//   .width('100%')////   this.Watermark2("20241012 张三", "15vp", "#2a000000")// }}
}

水了水了...


http://www.ppmy.cn/devtools/125284.html

相关文章

智能驾驶|迈向智能出行未来,AI如何应用在自动驾驶?

自动驾驶通过人工智能&#xff08;AI&#xff09;、机器学习、传感器融合和实时数据处理&#xff0c;使车辆能够在无需人类干预的情况下自主驾驶。随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;与智能汽车的结合正在成为现代交通运输领域的热潮。无人驾驶…

K8S技术深度解析与实践案例

K8S技术深度解析与实践案例 Kubernetes&#xff08;简称K8s&#xff09;作为当前云原生和微服务架构的首选平台&#xff0c;凭借其强大的容器编排和管理能力&#xff0c;迅速成为一线大厂分布式平台的标配技术。本文将从K8s的基本概念、架构设计、核心组件、应用场景以及实战案…

Win10 安装 Redis 数据库

一、Redis 数据库介绍 Redis 是一个开源的高性能键值对&#xff08;key-value&#xff09;的非关系型数据库。它通常用作数据结构服务器&#xff0c;支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xff09;、列表&a…

医学图像处理-X射线图像增强 -对比度限制自适应直方图均衡化(CLAHE)、非锐化掩模(UM)和高频强调滤波(HEF)

当然&#xff0c;我们可以将文档内容进行更清晰的分段&#xff0c;并保持逻辑布局。以下是重新组织后的文档结构&#xff1a; X射线图像增强 摘要 本项目的主要目标是使用三种图像增强算法来改善骨折骨骼的可视化&#xff1a;对比度限制自适应直方图均衡化&#xff08;CLAHE…

JavaSE——集合4:LinkedList、ArrayList与LinkedList的选择

目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…

CentOS 快速部署 MinIO 教程

CentOS 快速部署 MinIO 教程 一、安装部署 安装基本工具 [rootlocalhost ~]# yum install -y wget vim创建目录 [rootlocalhost ~]# mkdir /opt/minio [rootlocalhost ~]# mkdir /opt/minio/data进入目录 [rootlocalhost ~]# cd /opt/minio下载 MinIO 二进制文件 [rootlocalho…

MPA-SVM多变量回归预测|海洋捕食者优化算法-支持向量机|Matalb

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

FLINK SQLTable API 简介及运行环境

FLINK SQL&Table API 简介 Flink本身是批流统一的处理框架&#xff0c;所以Flink SQL和Table API是批流统一的上层处理API。目前&#xff0c;这两套API仍处于活跃的开发阶段&#xff0c;功能尚未完全完善。 Flink SQL Flink SQL&#xff1a;可以直接在代码中写SQL&#…