在HarmonyOS NEXT开发中实现给一个View添加Mask遮罩,其中Mask为一个带透明度的图片?
在HarmonyOS NEXT开发中实现给一个View添加Mask遮罩,其中Mask为一个带透明度的图片?
在 HarmonyOS NEXT 的 ArkUI 开发中,可以通过 Stack
+ BlendMode
组合实现图片遮罩效果。核心思路是通过混合模式将图片的 Alpha 通道作为遮罩层。以下是实现步骤:
// 目标组件(被遮罩的View)
@Entry
@Component
struct MaskExample {
build() {
Stack() {
// 原始内容(被遮罩的部分)
Column() {
Text("Hello HarmonyOS")
.fontSize(20)
.fontColor(Color.White)
}
.width('100%')
.height('100%')
.backgroundColor(Color.Blue)
// 遮罩层(带透明通道的图片)
Image($r('app.media.mask_image')) // 替换为你的遮罩图片资源
.width('100%')
.height('100%')
.objectFit(ImageFit.Fill)
.opacity(0.7) // 调整遮罩整体透明度
.blendMode(BlendMode.DstIn) // 关键混合模式
}
.width(300)
.height(300)
}
}
blendMode(BlendMode.DstIn)
opacity()
若需要动态调整遮罩,可通过状态管理实现:
@State maskOpacity: number = 0.7
build() {
Stack() {
// ...原始内容
Image($r('app.media.mask_image'))
.opacity(this.maskOpacity)
.blendMode(BlendMode.DstIn)
.onClick(() => {
this.maskOpacity = this.maskOpacity > 0 ? 0 : 0.7 // 点击切换遮罩显隐
})
}
}
resources/base/media/
目录放置遮罩图片DstIn
(遮罩形状)、SrcOver
(普通叠加).svg
)替代位图以获得更好缩放效果可通过调整 blendMode
和图片透明度实现类似蒙版、渐变遮罩等效果。
1 回答1.1k 阅读✓ 已解决
1 回答1.3k 阅读
1 回答1.2k 阅读
1 回答1.1k 阅读
1 回答1.1k 阅读
1 回答971 阅读
1 回答946 阅读
参考demo: