news 2026/9/28 20:42:39

渐变/阴影/滤镜⾼阶⽤法:统⼀项⽬UI、精简冗余组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
渐变/阴影/滤镜⾼阶⽤法:统⼀项⽬UI、精简冗余组件

一、前言

在鸿蒙 ArkUI 项目开发里,很多页面视觉效果,开发者第一反应都是靠多层组件嵌套叠加实现。想要渐变背景就外层套容器 + 内层色块;卡片阴影单独写一层透明占位组件;图片柔光、暗角效果,直接用多张图片叠加或者引入第三方处理库。

这种写法短期能快速做出视觉效果,但项目迭代久了问题会集中暴露:页面 DOM 层级堆叠严重,引发 GPU 过度绘制,列表滑动时频繁掉帧;各处样式写死在页面内,色值、模糊参数分散,UI 改版需要逐个页面修改,很难维持全项目视觉统一。

ArkUI 内置的渐变、阴影、滤镜能力,本身就可以在单个组件上完成复杂视觉渲染,减少多余嵌套。本文基于最新 API,讲解这三类属性的高阶写法,用更少组件实现统一 UI 规范,附带可直接运行的代码示例。

二、渐变:不止纯色过渡,多色分段 + 角度定位

linearGradient 线性渐变、radialGradient 径向渐变是开发最常用的两种渐变。很多人只写两色渐变,实际上多色节点、偏移位置、角度控制,可以直接实现分割底色、渐变蒙版,省去额外叠加容器。

@Entry @Component struct GradientDemo { build() { Column() { // 线性渐变,多色分段,卡片标题背景 Text("线性渐变卡片") .width("90%") .height(80) .fontSize(18) .fontColor("#fff") .padding(16) .linearGradient({ direction: GradientDirection.EndToStart, colors: [ [0x0066ff, 0.0], [0x3399ff, 0.6], [0x66bbff, 1.0] ] }) .borderRadius(12) .margin({bottom:20}) // 径向渐变,圆形渐变蒙版 Text("径向渐变效果") .width("90%") .height(160) .fontSize(18) .fontColor("#fff") .padding(16) .radialGradient({ centerX: "50%", centerY: "50%", radius: "80%", colors: [ [0xff7722, 0.0], [0xffbb66, 1.0] ] }) .borderRadius(12) } .padding(20) .width("100%") } }

colors 数组第二个参数是位置占比,取值 0~1。利用这个特性,还能实现硬分割的色块效果,不再需要两个 Row 并排叠加。

三、阴影高阶:内外阴影、多层阴影,替代悬浮遮罩组件

shadow 属性日常大多用来做卡片底部投影。很多人不知道,支持多组阴影同时声明,也可以配合 offset 调整方向,做出内阴影凹陷效果,不用额外增加一层 View 模拟凹陷。

@Entry @Component struct ShadowDemo { build() { Column() { // 多层外阴影,模拟悬浮层次感 Text("多层悬浮卡片") .width("90%") .height(100) .fontSize(18) .padding(16) .backgroundColor("#ffffff") .borderRadius(16) .shadow([ { radius: 12, color: "#10000000", offsetX: 0, offsetY: 4 }, { radius: 24, color: "#08000000", offsetX: 0, offsetY: 8 } ]) .margin({bottom:20}) // 内阴影,凹陷面板效果 Text("内阴影凹陷面板") .width("90%") .height(100) .fontSize(18) .padding(16) .backgroundColor("#f5f7fa") .borderRadius(16) .shadow({ radius: 6, color: "#20000000", offsetX: 0, offsetY: 2, isInner: true }) } .padding(20) .width("100%") } }

isInner 开启后阴影向内绘制。多层阴影叠加可以营造远近层次感,原本需要嵌套两层容器才能实现的悬浮效果,现在单组件完成。

四、滤镜 filter:模糊、色相、亮度调整,图片美化免叠加

filter 滤镜可以作用在图片、容器上,支持高斯模糊、亮度、对比度、饱和度等组合调整。做图片暗角、图片变暗蒙版、背景毛玻璃,不需要叠加半透明组件,直接给组件设置 filter。

@Entry @Component struct FilterDemo { build() { Column() { Image($r("sys.media.ohos_ic_public_cover")) .width("90%") .height(180) .objectFit(ImageFit.Cover) .borderRadius(12) .filter( filterBrightness(0.8) .combine(filterSaturate(1.2)) .combine(filterBlur(2)) ) .margin({bottom:20}) Text("毛玻璃文字面板") .width("90%") .height(80) .fontSize(18) .fontColor("#fff") .textAlign(TextAlign.Center) .borderRadius(12) .backdropBlur(8) .backgroundColor("#20ffffff") } .padding(20) .width("100%") } }

filter 支持链式 combine 组合多种滤镜参数。backdropBlur 是背景模糊,区别于 filterBlur,前者模糊组件后方画面,适合弹窗、卡片毛玻璃场景;后者模糊组件自身内容。

五、统一 UI:封装全局样式,消除冗余代码

项目中,卡片、渐变标题、悬浮面板样式往往多处复用。我们可以抽离 @Builder,统一管理渐变、阴影、滤镜参数,全项目复用一套视觉标准。

@Builder function CardNormal() { Column() .width("100%") .backgroundColor("#fff") .borderRadius(16) .shadow([ { radius: 12, color: "#10000000", offsetX: 0, offsetY: 4 }, { radius: 24, color: "#08000000", offsetX: 0, offsetY: 8 } ]) } @Builder function GradientTitle() { Text() .width("100%") .height(72) .linearGradient({ direction: GradientDirection.EndToStart, colors: [ [0x0066ff, 0.0], [0x3399ff, 1.0] ] }) .borderRadius({topLeft:12, topRight:12}) } @Entry @Component struct UiBuildDemo { build() { Column() { GradientTitle() CardNormal() { Text("业务卡片内容").fontSize(16).padding(16) } } .width("90%") .padding(20) } }

所有视觉参数集中维护,后续 UI 改版,只修改这一处 Builder,页面全部同步更新,不用逐个页面查找修改。

六、小结

渐变、阴影、滤镜这几个属性不只是锦上添花的美化能力,更是精简组件结构、统一项目 UI 规范的工具。很多多层嵌套实现的视觉效果,都可以合并到单个组件上完成,降低页面层级,减少过度绘制。

在实际开发中,把通用视觉样式抽离为 Builder,统一管理色值、模糊半径、阴影参数。后续新增页面直接复用,既能保持视觉风格统一,也减少大量重复冗余布局代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 20:37:36

redis缓存问题

1.缓存穿透定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库解决方案:缓存空对象:优点: 实现简单,维护方便缺点: 额外的内存消耗;可能造成短期的不一致布隆过滤器:优点 :内存占用较少,没有多余key缺点 : 实现复杂;存…

作者头像 李华
网站建设 2026/9/28 20:36:53

实测体验|PaperXie 五大核心板块上手感受,毕设党可以直接参考

正在做毕设的同学,大概率都听过 PaperXie 这款一站式 AI 论文平台。很多人好奇,它的五大核心板块实际用起来是什么样?不是干巴巴的功能罗列,今天从使用者视角聊聊每个板块适合解决什么痛点、真实体验以及使用时需要留意的地方。 &…

作者头像 李华
网站建设 2026/9/28 20:35:55

云安全-存储桶安全

这里使用SILO来模拟存储桶环境 启动指令是密码在/root/.silo-credentials 存储桶公开可读 这里先创建一个存储桶这里设置规则为公开可读这里上传了一个图片直接访问这个桶,会显示被拒绝但如果访问桶下的文件就可以访问到这里设置存储桶的策略为ListBucket 就可以看到…

作者头像 李华
网站建设 2026/9/28 20:35:37

从执行工具到数字伙伴,智能体加速数智生产力

智能体是以大语言模型为认知内核,具备自主感知、推理决策、规划执行与持续学习能力的智能系统——它能够自主拆解任务、调用外部工具、与环境交互,并根据反馈动态调整策略,直至完成目标。其核心能力可归纳为四层递进的工程范式:Pr…

作者头像 李华
网站建设 2026/9/28 20:34:03

审批等三天怎么办?Timer、Deadline、撤回与迟到消息实战

审批等三天怎么办?Timer、Deadline、撤回与迟到消息实战 《企业级 Workflow 实战:从审批流到 AI Agent》 第 08 篇 / 共 24 篇 贯穿项目:星河设备的 AcmeFlow 客户开通中心。 本篇交付:持久截止时间、到期补扫、审批与撤回的竞态规…

作者头像 李华