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

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

关键词:鸿蒙、水印、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")// }}
}

水了水了...

相关文章:

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

关键词&#xff1a;鸿蒙、水印、Watermark、页面、触摸问题 注&#xff1a;本期文章同样适用 OpenHarmony 的开发 在app开发过程中时常会出现敏感信息页面&#xff0c;为保护信息安全和及时的数据追踪&#xff0c;通常会采用给页面加水印的形式&#xff0c;那么本期文章会介绍…...

selenium自动化测试之Junit

1. 常用的注解 将junit的索引添加到pom文件&#xff1a; <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…...

【氮化镓】基于氮化镓的互补逻辑集成电路[Nature Electronics]

【摘要】本文介绍了一种基于氮化镓(GaN)的互补金属氧化物半导体(CMOS)逻辑集成电路,该电路利用氧等离子体处理技术实现了增强型n沟道和p沟道GaN场效应晶体管的单片集成。研究者们展示了包括反相器、与非门、或非门和传输门在内的基本逻辑门,以及多级逻辑电路,如锁存器和…...

Linux之如何找回 root 密码?

1、启动系统&#xff0c;进入开界面&#xff0c;在界面中按“e"进入编辑界面 2、进入编辑界面&#xff0c;使用键盘上的上下键把光标往下移动&#xff0c;找到以”Linux16“开通内容所在的行数&#xff0c;在行的最后面输入&#xff1a;init/bin/sh 3、输入完成后&…...

后端参数校验方式

1. 使用Hibernate Validator进行注解校验 这是Java中最常用的参数校验方式&#xff0c;基于JSR 303/JSR 380规范的实现&#xff0c;通常结合Valid或Validated注解进行参数校验。 使用步骤&#xff1a; 添加依赖&#xff08;如果使用Spring Boot&#xff0c;通常已经内置了Hi…...

访问控制列表(课内实验)

实验2&#xff1a;访问控制列表 实验目的及要求&#xff1a; 通过实验&#xff0c;进一步的理解标准ACL与扩展ACL的工作原理及执行过程。理解通配符的概念&#xff0c;熟练掌握标准ACL与扩展ACL的配置指令&#xff0c;掌握将访问控制列表应用VTY线路上&#xff0c;并且能够判断…...

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

处理Java内存溢出问题&#xff08;java.lang.OutOfMemoryError&#xff09;&#xff1a;增加JVM堆内存与调优 在进行压力测试时&#xff0c;遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…...

数据分析库Pandas

一、认识Pandas数据分析库 Pandas是一个功能强大的数据分析库&#xff0c;它提供了丰富的数据结构和函数来处理和分析表格数据。在处理类似您提供的Excel文件时&#xff0c;首先需要导入Pandas库并读取数据&#xff0c;然后进行数据清洗和预处理&#xff0c;最后进行数据分析和…...

nginx做负载均衡的策略有哪些和模块

文章目录 策略模块 策略 轮询&#xff1a;轮询是Nginx默认的负载均衡策略&#xff0c;每个请求会按时间顺序分配到不同的后端服务器。这种方式适用于服务器配置相当且无状态的服务场景。加权轮询&#xff1a;在轮询的基础上&#xff0c;通过设置权重来调整不同服务器处理请求的…...

基于SSM社区医院预约转诊管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…...

Android适配器更改,ListView未收到通知解析

只需要在每次适配器发生变化时&#xff0c;调用函数adapter.notifyDataSetChanged(); 其中的adapter是适配器名。 需要说明的适配器对应的数组&#xff1a;List<String>也是适配器的一部分。 如&#xff1a;以下代码中的lists数组 List<T> lists new ArrayLis…...

ubuntu18.04系统中图形化界面

一、Ubuntu 18.04 中&#xff0c;使用 GDM 作为默认的图形用户界面&#xff08;GUI&#xff09;管理器。GDM 是 GNOME Display Manager 的缩写&#xff0c;它是用于 Ubuntu 的显示管理器&#xff0c;负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…...

深入Semantic Kernel:插件开发与实践应用(进阶篇)

文章目录 一、引言二、开发Semantic Kernel插件三、实战3.1 时间信息插件3.2 小部件工厂插件3.3 初始化Semantic Kernel实例3.4 四个实战示例3.4.1 模型幻觉3.4.2 给模型提供时间信息3.4.3 AI自动调用函数3.4.4 AI自动调用和使用枚举 四、结论 一、引言 在上一篇入门文章《探索…...

基于SpringBoot+Vue+Uniapp的植物园管理小程序系统(2024最新,源码+文档+远程部署+讲解视频等)

3. 论文参考 4. 项目运行截图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring …...

2024zzuacm新生选拔赛第一场

2024zzuacm新生选拔赛第一场https://ac.nowcoder.com/acm/contest/92409 python代码源自我有异议症QAQ A - 降智视频 题意 起初有n个数都在丁丁手中&#xff0c;进行如下操作k次&#xff1a; 豆豆从丁丁手中拿走标号为奇数的数。对丁丁的其他的数进行重新标号。 问进行k次…...

IP地址如何支持远程办公?

由于当今社会经济的飞速发展&#xff0c;各个方向的业务都不免接触到跨省、跨市以及跨国办公的需要&#xff0c;随之而来的远程操作的不方便&#xff0c;加载缓慢&#xff0c;传输文件时间过长等困难&#xff0c;如何在万里之外实现远程办公呢&#xff1f;我们以以下几点进行阐…...

spring 集合注入格式

数组 List Set Map properties 案例 package org.example.dao.impl;import org.example.dao.BookDao;import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set;public class BookDaoImpl implements BookDao {private int[] array;p…...

基于Zabbix进行服务器运行情况监测

文章目录 引言I Zabbix主要构成下载并安装Zabbix被监控主机安装zabbix agent创建被监控主机报警设置II 常见问题cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)重置 Zabbix Web 界面密码Zabbix agent i…...

Github优质项目推荐 - 第五期

文章目录 Github优质项目推荐 - 第五期一、【localsend】&#xff0c;47.5k stars - 附近设备文件互传二、【Pake】&#xff0c;29.9k stars - 网页变成桌面应用三、【laravel-crm】&#xff0c;10.7k stars - CRM 解决方案四、【localstack】&#xff0c;55.7k stars - 本地 A…...

Java_ EE (网络编程)

网络编程基本概念: 计算机网络计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。从其…...

【技术拆解】从EAIDK-610到SCARA机械臂:一个象棋机器人如何实现“眼、脑、手”协同对弈

1. 象棋机器人的“眼”&#xff1a;OpenCV视觉识别系统 象棋机器人的视觉系统就像人类的眼睛&#xff0c;它需要准确识别棋盘状态和棋子位置。我们选用OpenCV作为核心图像处理库&#xff0c;配合EAIDK-610开发板的摄像头模块&#xff0c;实现了毫米级精度的棋子定位。 在实际…...

如何在电脑上完美运行3DS游戏:Citra模拟器5步安装指南

如何在电脑上完美运行3DS游戏&#xff1a;Citra模拟器5步安装指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温任天堂3DS的经典游戏吗&#xff1f;Citra模拟器作为目前最优秀的开源3DS模拟…...

基于FET6254-C多核异构处理器的智能运动控制系统设计与实践

1. 项目概述&#xff1a;当运动控制遇上嵌入式智能最近在做一个智能运动控制的项目&#xff0c;从传统的PLC方案转向了更灵活、更智能的嵌入式平台。选型过程中&#xff0c;飞凌嵌入式的FET6254-C核心板进入了我的视野&#xff0c;经过一番深度评估和实际测试&#xff0c;它确实…...

多智能体 执行-辩论-校验 闭环架构

文章目录一、核心本质二、三大智能体权责划分1. 执行Agent&#xff08;A/B/C&#xff09;2. 辩论Agent3. 校验Agent&#xff08;终审裁判&#xff09;三、闭环流转逻辑四、关键设计规则五、TaskList 任务标准字段一、核心本质 整体架构本质&#xff1a;执行 → 辩论 → 校验 三…...

取号机嵌入式扫码模组选型与集成实战:以4500R为例破解复杂场景应用难题

1. 项目概述&#xff1a;取号机扫码模组的选型困境与破局在智慧政务大厅、银行网点、医院门诊这些我们日常办事的高频场景里&#xff0c;取号机早已不是新鲜事物。但不知道你有没有留意过&#xff0c;现在越来越多的取号机旁边&#xff0c;除了传统的按键和触摸屏&#xff0c;还…...

京东自动评价工具:Python智能购物助手终极指南

京东自动评价工具&#xff1a;Python智能购物助手终极指南 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 想要轻松完成京东购物后的评价任务吗&#xff1f;jd_AutoComment 是一款基于Python开…...

使用VSCode无法登录Codex解决方法

登录时提示&#xff1a;Token exchange failed: token endpoint returned status 403 Forbidden: Country, region, or territory not supported确保魔法工具的连接模式是支持应用的&#xff0c;有的是只支持网站&#xff0c;切换成支持应用模式即可解决此问题。...

国民技术N32G030K8L7芯片,用MDK从官方FTP下载到点亮LED的保姆级教程

国民技术N32G030K8L7芯片开发实战&#xff1a;从资料获取到LED点亮的全流程指南 拿到一块全新的开发板时&#xff0c;那种既兴奋又忐忑的心情想必每位工程师都经历过。N32G030K8L7作为国民技术推出的高性价比MCU&#xff0c;凭借其出色的性能和丰富的外设资源&#xff0c;正成为…...

Java——线程的中断

线程的中断1、取消/关闭的场景2、取消/关闭的机制3、线程对中断的反应3.1、Runnable3.2、Waiting/Timed_Waiting3.3、Blocked3.4、New/Terminate4、如何正确地取消/关闭线程1、取消/关闭的场景 我们知道&#xff0c;通过线程的start方法启动一个线程后&#xff0c;线程开始执行…...

如何实现10倍加速:云原生镜像同步终极指南

如何实现10倍加速&#xff1a;云原生镜像同步终极指南 【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢&#xff0c;需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 项目地址: https://gitcode.com/GitHub_Trending/pu/publ…...