尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

《图片添加贴纸》一、Stack使用指南

《图片添加贴纸》一、Stack使用指南
📅 发布时间:2026/7/3 18:59:35

HarmonyOS ArkUI Stack(层叠布局)使用指南

效果

一、概述

在HarmonyOS ArkUI开发中,Stack是一种非常重要的层叠布局容器。它允许子组件按照先后顺序逐层堆叠,后面的子组件会覆盖在前面的子组件之上。Stack在实际开发中广泛应用于以下场景:

  • 图片叠加水印或贴纸:底层放置背景图片,上层叠加贴纸组件。
  • 悬浮按钮:在页面内容上叠加一个操作按钮。
  • 遮罩层与弹窗:在页面内容上叠加半透明遮罩。
  • 角标提示:在图标右上角叠加未读消息数量。

本文将从基础概念讲起,通过多个示例逐步深入,帮助你全面掌握Stack的使用方法。

官方文档参考:Stack - HarmonyOS开发者文档


二、基本概念

2.1 Stack的工作原理

Stack是一个层叠容器,子组件按照添加顺序依次入栈,后添加的子组件在视觉上位于上层(即Z轴更高)。

Stack { 子组件A // 最底层 子组件B // 中间层 子组件C // 最顶层 }

2.2 Stack与Column/Row的区别

特性ColumnRowStack
排列方向垂直方向水平方向层叠方向(Z轴)
子组件是否重叠不重叠不重叠可以重叠
适用场景纵向列表布局横向排列布局叠加、覆盖布局

三、基本用法

3.1 最简示例

@Entry@Componentstruct StackBasicDemo{build(){Stack(){// 底层:蓝色矩形Column().width(200).height(200).backgroundColor('#4FC3F7').borderRadius(12)// 上层:文字Text('Hello Stack').fontSize(24).fontWeight(FontWeight.Bold).fontColor(Color.White)}.width('100%').height(300).justifyContent(FlexAlign.Center)}}

运行效果:蓝色矩形上方居中显示白色文字 “Hello Stack”。

3.2 对齐方式

Stack 通过alignContent属性控制子组件的对齐方式,支持以下枚举值:

枚举值说明
Alignment.TopStart左上角对齐
Alignment.Top顶部居中对齐
Alignment.TopEnd右上角对齐
Alignment.Start左侧居中对齐
Alignment.Center居中对齐(默认)
Alignment.End右侧居中对齐
Alignment.BottomStart左下角对齐
Alignment.Bottom底部居中对齐
Alignment.BottomEnd右下角对齐
@Entry@Componentstruct StackAlignDemo{build(){Stack({alignContent:Alignment.TopEnd}){// 底层背景Column().width(300).height(300).backgroundColor('#E0E0E0').borderRadius(16)// 角标Text('99+').fontSize(12).fontColor(Color.White).backgroundColor('#FF5252').borderRadius(10).padding({left:6,right:6,top:2,bottom:2}).margin({top:8,right:8})}.width('100%').height(350).justifyContent(FlexAlign.Center)}}

运行效果:灰色矩形右上角显示红色角标 “99+”。

3.3 层叠顺序

子组件按照在代码中的先后顺序依次层叠,后面的组件在上层:

@Entry@Componentstruct StackOrderDemo{build(){Stack(){// 第1层(最底层)Circle().width(120).height(120).fill('#FF7043').offset({x:0,y:0})// 第2层Circle().width(120).height(120).fill('#66BB6A').offset({x:40,y:0})// 第3层(最顶层)Circle().width(120).height(120).fill('#42A5F5').offset({x:80,y:0})}.width('100%').height(200)}}

运行效果:三个圆形从左到右依次排列,蓝色圆形在最上层。


四、进阶用法

4.1 图片叠加贴纸效果

这是Stack最典型的应用场景之一——在图片上叠加可拖动的贴纸:

@Entry@Componentstruct StickerOnImageDemo{@StatestickerOffsetX:number=0;@StatestickerOffsetY:number=0;build(){Stack(){// 底层:背景图片Image($r('app.media.background')).width(300).height(300).objectFit(ImageFit.Cover).borderRadius(12)// 上层:可拖动贴纸Text('⭐').fontSize(40).translate({x:this.stickerOffsetX,y:this.stickerOffsetY}).gesture(PanGesture().onActionUpdate((event:GestureEvent)=>{this.stickerOffsetX+=event.offsetX;this.stickerOffsetY+=event.offsetY;}))}.width(300).height(300).clip(true)// 裁剪超出边界的内容}}

4.2 使用zIndex控制层级

当需要动态调整层叠顺序时,可以使用zIndex属性:

@Entry@Componentstruct ZIndexDemo{@StateisSwapped:boolean=false;build(){Column({space:20}){Stack(){Circle().width(100).height(100).fill('#FF7043').zIndex(this.isSwapped?2:1)Circle().width(100).height(100).fill('#42A5F5').offset({x:50}).zIndex(this.isSwapped?1:2)}.width('100%').height(150)Button('切换层级').onClick(()=>{this.isSwapped=!this.isSwapped;})}}}

4.3 结合clip实现裁剪效果

Stack常与.clip(true)配合使用,防止子组件内容溢出边界:

Stack(){Image($r('app.media.background')).width(200).height(200)// 贴纸可以拖动,但不会超出Stack边界Text('🎉').fontSize(36).translate({x:150,y:150})}.clip(true)// 关键:启用裁剪

五、常用属性一览

属性类型说明
alignContentAlignment子组件对齐方式,默认Alignment.Center
justifyContentFlexAlign在主轴方向上的对齐方式
clipboolean是否裁剪超出边界的子组件
width/heightLengthStack的尺寸
backgroundColorResourceColor背景色
borderRadiusLength圆角半径

六、实战示例:卡片叠加标题栏

下面实现一个带有标题栏覆盖效果的图片卡片:

@Entry@Componentstruct CardOverlayDemo{build(){Column({space:16}){Stack({alignContent:Alignment.Bottom}){// 底层:风景图片Image($r('app.media.background')).width('90%').height(240).objectFit(ImageFit.Cover).borderRadius(16)// 上层:半透明标题栏Row(){Text('风景照片').fontSize(18).fontWeight(FontWeight.Medium).fontColor(Color.White)Blank()Text('2025-06-27').fontSize(12).fontColor('rgba(255,255,255,0.7)')}.width('90%').height(48).padding({left:16,right:16}).backgroundColor('rgba(0,0,0,0.4)').borderRadius({bottomLeft:16,bottomRight:16})}.width('100%')}.width('100%').height('100%').padding({top:60})}}

七、注意事项

  1. 性能考量:Stack中子组件数量不宜过多,每个子组件都会参与布局计算和渲染。
  2. 层级管理:合理使用zIndex控制层级,避免层级混乱导致组件被意外遮挡。
  3. clip属性:当子组件可能超出Stack边界时,建议设置.clip(true)防止溢出。
  4. 尺寸设置:Stack默认尺寸由子组件决定,建议显式设置宽高以获得稳定的布局效果。
  5. 事件穿透:Stack中上层组件如果透明,触摸事件可能穿透到下层,可通过.hitTestBehavior(HitTestMode.Transparent)控制。

八、总结

Stack是ArkUI中最灵活的层叠布局容器,核心要点如下:

  • 子组件按添加顺序层叠,后添加的在上层。
  • 通过alignContent控制对齐方式。
  • 通过zIndex动态控制层级。
  • 通过.clip(true)防止内容溢出。
  • 适用于图片叠加贴纸、角标提示、悬浮按钮、遮罩层等场景。

掌握Stack的使用,是构建复杂HarmonyOS UI界面的基础。
认尺寸由子组件决定,建议显式设置宽高以获得稳定的布局效果。
5.事件穿透:Stack中上层组件如果透明,触摸事件可能穿透到下层,可通过.hitTestBehavior(HitTestMode.Transparent)控制。


八、总结

Stack是ArkUI中最灵活的层叠布局容器,核心要点如下:

  • 子组件按添加顺序层叠,后添加的在上层。
  • 通过alignContent控制对齐方式。
  • 通过zIndex动态控制层级。
  • 通过.clip(true)防止内容溢出。
  • 适用于图片叠加贴纸、角标提示、悬浮按钮、遮罩层等场景。

掌握Stack的使用,是构建复杂HarmonyOS UI界面的基础。

相关新闻

  • 储能BMS温度传感器选型——90%的人不知道这3个坑
  • 构建自动化漏洞扫描体系:从工具使用到闭环管理的实战指南
  • 2026在线去除水印方法:免费工具优缺点+安全网站推荐

最新新闻

  • 基于PIC18F97J94与IN-PC55TBTRGB的智能灯光控制系统设计
  • ComfyUI-to-Python-Extension:从可视化工作流到自动化脚本的魔法转换
  • [实战] 2026年制造业数字化:CAD工程图纸自动识别与质量检验计划生成指南
  • 2024年SEO优化实战:算法对抗与内容架构设计
  • 六月最贵的三起被盗,没有一个是被“黑“进去的
  • 终极Unity游戏资源编辑器:UABEA完整使用指南与模组制作教程

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号