HarmonyOS 鸿蒙Next在页面背景上添加全局水印
HarmonyOS 鸿蒙Next基于原生的水印添加能力
场景描述
HarmonyOS 鸿蒙Next在页面背景上添加全局水印 HarmonyOS添加水印是一个比较常见的功能,下面列举一些遇到的业务需求:
场景一:在页面背景上添加全局水印
方案描述
##场景一、在页面背景上添加全局水印
效果图:
方案
页面全局水印的实现思路是使用透明背景的canvas画布绘制文字水印,在使用Stack组件叠加在page跟容器上
方式一:使用canvas进行绘制
Stack({ alignContent: Alignment.Center }) {
Column() {
Text("没有数据哦").fontColor("#495057")
Image($r("app.media.empty")).width(300)
}
Canvas(this.context)
.width("100%")
.height("100%")
.hitTestBehavior(HitTestMode.Transparent)
.onReady(() => {
this.context.fillStyle = '#10000000'
this.context.font = "16vp"
this.context.textAlign = "center"
this.context.textBaseline = "middle"
// 在这里绘制文字水印,也可以是图片水印
for (let i = 0; i < this.context.width / 120; i++) {
this.context.translate(120, 0)
let j = 0
for (; j < this.context.height / 120; j++) {
this.context.rotate(-Math.PI / 180 * 30)
// 此处水印数据是写死的,具体请替换为自己的水印
this.context.fillText("水印水印水印", -60, -60)
this.context.rotate(Math.PI / 180 * 30)
this.context.translate(0, 120)
}
this.context.translate(0, -120 * j)
}
})
}.layoutWeight(1)
方式二:使用overlay属性绘制
方式二思路与方式一实现思路一致,该方式可以讲水印组件单独拧出来,在其他使用时使用overlay属性来使用,实现效果与方式一一致
@Builder
Watermark() {
Canvas(this.context)
.width("100%")
.height("100%")
.hitTestBehavior(HitTestMode.Transparent)
.onReady(() => {
this.context.fillStyle = '#10000000'
this.context.font = "16vp"
this.context.textAlign = "center"
this.context.textBaseline = "middle"
// 在这里绘制文字水印,也可以是图片水印
for (let i = 0; i < this.context.width / 120; i++) {
this.context.translate(120, 0)
let j = 0
for (; j < this.context.height / 120; j++) {
this.context.rotate(-Math.PI / 180 * 30)
// 此处水印数据是写死的,具体请替换为自己的水印
this.context.fillText("水印水印水印", -60, -60)
this.context.rotate(Math.PI / 180 * 30)
this.context.translate(0, 120)
}
this.context.translate(0, -120 * j)
}
})
}
Column() {
Text("没有数据哦").fontColor("#495057")
Image($r("app.media.empty")).width(300)
}
.layoutWeight(1)
.overlay(this.Watermark())
.width("100%")
更多场景参考下面地址: https://developer.huawei.com/consumer/cn/forum/topic/0202153747914463557?fid=0109140870620153026
当前只能按照方案一的方式来写,然后大概思路就是在按照方案一的方式给navigation添加水印 然后吧所有的页面都维护在navigation中,这样在一个窗口里面的所有页面都存在水印
上面方案暂时只能给图片添加水印,视频水印如果是在app中可以参考全局水印方案,盖一层蒙版在视频组件上
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
HarmonyOS 鸿蒙Next支持原生的水印添加能力,允许开发者在多种场景下灵活应用水印。在页面背景上,可通过Canvas或Overlay方式绘制水印;保存或拍照图片时,可使用OffScreenCanvas在离屏画布上绘制水印并保存。这些功能提升了应用的版权保护和个性化设置能力。如需深入了解实现细节,建议查阅HarmonyOS官方文档或相关开发者社区。如果问题依旧没法解决请加我微信,我的微信是itying888。