HarmonyOS7 ArkUI 图片九宫格切割 - 正方形裁剪预览与发布效果实战:从状态到页面反馈
文章目录前言先把业务看明白状态和 UI 的关系核心逻辑拆读片段 1get cols(): number {片段 2get currentFilter(): FilterPreset_wc1v {使用方式完整代码一个小复盘前言这个案例看着是一个小页面里面其实塞了不少常见业务写法列表、筛选、按钮事件、条件样式基本都能练到。它的主线是图片九宫格切割细节落在正方形裁剪预览与发布效果。这些细节刚好能把页面状态、用户操作和组件刷新串起来。先把业务看明白NineGridImageSplitPage不是一个只展示静态内容的页面。它会根据用户点击、输入、切换或计时来改变界面所以阅读代码时可以先抓三条线观察点在这个案例里的表现页面主题图片九宫格切割主要文案原图,清新,复古,黑白,暖调,冷调常用组件Button,Column,Divider,ForEach,Grid,GridItem,Row,Scroll,Slider,Stack,Text适合练习状态驱动 UI、条件样式、列表渲染、事件回调状态和 UI 的关系ArkUI 的页面刷新依赖状态变化。下面这些State字段就是页面的“开关”和“数据源”不用手动找 DOM也不用自己通知某个控件刷新。状态字段类型我会怎么理解它selectedCountnumber当前选中项决定高亮和内容切换filterIndexnumber当前选中项决定高亮和内容切换previewModeboolean记录页面当前选择、输入或展示状态spacingnumber记录页面当前选择、输入或展示状态一个经验先把State看完再看build()页面逻辑会清楚很多。否则很容易被一长串布局代码带偏。核心逻辑拆读片段 1get cols(): number {这段代码承担的是页面里的“判断”或“动作”把它从布局里抽出来后build()会清爽很多。后面要加新条件也不会到处翻 UI 代码。getcols():number{if(this.selectedCount1)return1if(this.selectedCount4)return2return3}片段 2get currentFilter(): FilterPreset_wc1v {这段代码承担的是页面里的“判断”或“动作”把它从布局里抽出来后build()会清爽很多。后面要加新条件也不会到处翻 UI 代码。getcurrentFilter():FilterPreset_wc1v{returnthis.filterPresets[this.filterIndex]}使用方式把下面代码放进 ArkTS 页面文件中即可运行。用于正式项目时我会继续把数据模型、卡片 Builder 和页面事件拆出去页面文件只负责组合。建议练习顺序先改状态字段 - 再改交互事件 - 最后调整 UI 样式 检查重点点击是否刷新、列表 key 是否稳定、条件样式是否集中管理这份代码可以继续扩展的方向把模拟数据替换成接口数据抽出复用卡片组件增加空状态和异常状态补充深色模式或主题色适配对输入类场景增加校验提示完整代码// NineGridImageSplitPage - 图片九宫格切割 - 正方形裁剪预览与发布效果interfaceGridCell{row:numbercol:numberbgX:numberbgY:number}interfaceFilterPreset_wc1v{name:stringbrightness:numbercontrast:numbersaturate:numbergrayscale:number}EntryComponentstruct NineGridImageSplitPage{StateselectedCount:number9StatefilterIndex:number0StatepreviewMode:booleanfalseStatespacing:number4privatefilterPresets:FilterPreset_wc1v[][{name:原图,brightness:1.0,contrast:1.0,saturate:1.0,grayscale:0},{name:清新,brightness:1.1,contrast:0.9,saturate:1.3,grayscale:0},{name:复古,brightness:0.9,contrast:1.1,saturate:0.7,grayscale:0.2},{name:黑白,brightness:1.0,contrast:1.2,saturate:0,grayscale:1.0},{name:暖调,brightness:1.05,contrast:1.0,saturate:1.2,grayscale:0},{name:冷调,brightness:0.95,contrast:1.1,saturate:0.9,grayscale:0},]privatecolorPalette:string[][#FF6B9D,#C44569,#F8B500,#6C5CE7,#00B894,#0984E3,#E17055,#74B9FF,#A29BFE,]getcols():number{if(this.selectedCount1)return1if(this.selectedCount4)return2return3}getcurrentFilter():FilterPreset_wc1v{returnthis.filterPresets[this.filterIndex]}getCells():GridCell[]{constcells:GridCell[][]for(letr0;rthis.cols;r){for(letc0;cthis.cols;c){if(cells.lengththis.selectedCount){cells.push({row:r,col:c,bgX:c,bgY:r})}}}returncells}build(){Column({space:0}){// 顶部导航Row(){Text(✕).fontSize(20).fontColor(#1a1a1a)Blank()Text(九宫格切割).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#1a1a1a)Blank()Text(发布).fontSize(16).fontColor(#1890ff).fontWeight(FontWeight.Bold)}.width(100%).padding({left:16,right:16,top:14,bottom:14}).backgroundColor(#ffffff)Scroll(){Column({space:20}){// 源图预览用颜色渐变模拟Column(){Text(源图预览).fontSize(13).fontColor(#999999).padding({bottom:10}).width(100%)Stack(){Column().width(100%).height(280).linearGradient({angle:135,colors:[[#FF6B9D,0],[#C44569,0.3],[#F8B500,0.6],[#6C5CE7,1.0]]}).borderRadius(12).brightness(this.currentFilter.brightness).contrast(this.currentFilter.contrast).saturate(this.currentFilter.saturate).grayscale(this.currentFilter.grayscale)// 九宫格切割线if(this.selectedCount9){Column(){Divider().strokeWidth(2).color(#ffffff80).margin({top:93})Divider().strokeWidth(2).color(#ffffff80).margin({top:93})}.width(100%).height(280).position({x:0,y:0})Row(){Divider().width(2).height(280).backgroundColor(#ffffff80).margin({left:33%})Divider().width(2).height(280).backgroundColor(#ffffff80).margin({left:33%})}.width(100%).height(280).position({x:0,y:0})}}.width(100%)}.padding({left:16,right:16})// 滤镜选择Column({space:10}){Text(滤镜效果).fontSize(14).fontWeight(FontWeight.Medium).fontColor(#1a1a1a).padding({left:16}).width(100%)Scroll(){Row({space:12}){ForEach(this.filterPresets,(f:FilterPreset_wc1v,idx:number){Column({space:6}){Column().width(60).height(60).linearGradient({angle:135,colors:[[#FF6B9D,0],[#6C5CE7,1.0]]}).borderRadius(8).brightness(f.brightness).contrast(f.contrast).saturate(f.saturate).grayscale(f.grayscale).border({width:2,color:this.filterIndexidx?#1890ff:transparent})Text(f.name).fontSize(11).fontColor(this.filterIndexidx?#1890ff:#666666)}.alignItems(HorizontalAlign.Center).onClick((){this.filterIndexidx})})}.padding({left:16,right:16})}.scrollable(ScrollDirection.Horizontal).scrollBar(BarState.Off)}// 切割数量选择Column({space:12}){Text(切割数量).fontSize(14).fontWeight(FontWeight.Medium).fontColor(#1a1a1a).padding({left:16}).width(100%)Row({space:12}){ForEach([1,2,3,4,6,9],(n:number){Column({space:4}){// 预览小网格Column(){Grid(){ForEach(Array.from({length:n}),(_:Object,i:number){GridItem(){Column().width(100%).height(100%).backgroundColor(this.colorPalette[i%this.colorPalette.length])}})}.columnsTemplate(n1?1fr:n4?1fr 1fr:1fr 1fr 1fr).rowsGap(2).columnsGap(2).width(36).height(36)}.width(44).height(44).backgroundColor(this.selectedCountn?#e8f4ff:#f5f5f5).borderRadius(8).border({width:2,color:this.selectedCountn?#1890ff:transparent}).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)Text(${n}格).fontSize(11).fontColor(this.selectedCountn?#1890ff:#666666)}.alignItems(HorizontalAlign.Center).onClick((){this.selectedCountn})})}.justifyContent(FlexAlign.SpaceEvenly).width(100%)}// 间距设置Column({space:8}){Row(){Text(切割间距).fontSize(14).fontWeight(FontWeight.Medium).fontColor(#1a1a1a)Blank()Text(${this.spacing}px).fontSize(13).fontColor(#1890ff)}.padding({left:16,right:16}).width(100%)Slider({value:this.spacing,min:0,max:20,step:1}).width(90%).trackColor(#e8e8e8).selectedColor(#1890ff).onChange((v:number){this.spacingMath.round(v)})}// 切割预览Column({space:12}){Text(切割预览).fontSize(14).fontWeight(FontWeight.Medium).fontColor(#1a1a1a).padding({left:16}).width(100%)Grid(){ForEach(this.getCells(),(cell:GridCell,idx:number){GridItem(){Column().width(100%).height(100%).linearGradient({angle:135,colors:[[#FF6B9D,0],[#C44569,0.3],[#F8B500,0.6],[#6C5CE7,1.0]]}).brightness(this.currentFilter.brightness).contrast(this.currentFilter.contrast).saturate(this.currentFilter.saturate).grayscale(this.currentFilter.grayscale)}})}.columnsTemplate(this.cols1?1fr:this.cols2?1fr 1fr:1fr 1fr 1fr).rowsGap(this.spacing).columnsGap(this.spacing).width(100%).height(this.cols1?300:this.cols2?200:300).padding({left:16,right:16})}// 发布按钮Button(保存并发布).width(90%).height(50).fontSize(16).backgroundColor(#1890ff).borderRadius(25).fontWeight(FontWeight.Medium).margin({top:8})Column().height(32)}.padding({top:16})}.layoutWeight(1).backgroundColor(#f5f7fa)}.width(100%).height(100%).backgroundColor(#f5f7fa)}}一个小复盘这个案例可以当成一个小模板先把页面会变的东西放进状态再用函数或 Builder 处理重复逻辑最后让布局只关心展示。写 HarmonyOS7 页面时这个顺序通常比一上来堆 UI 更稳。

相关新闻

【关于微服务的深入理解】

【关于微服务的深入理解】

1.什么是微服务?微服务就是把一个大型的单体应用,按照业务功能拆分成多个独立的小服务,每个小服务独立开发、独立部署、独立运行。微服务与高并发的区别?微服务解决的是:组织复杂度和系统脆弱性的问题高并发&#xff1…

2026/7/13 15:17:31阅读更多 →
OpenModScan:免费开源的Modbus调试工具终极指南,支持TCP和RTU协议

OpenModScan:免费开源的Modbus调试工具终极指南,支持TCP和RTU协议

OpenModScan:免费开源的Modbus调试工具终极指南,支持TCP和RTU协议 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 还在为工业设备通讯调试而烦恼…

2026/7/13 15:17:31阅读更多 →
人工智能演进之路:从符号逻辑到自主智能体的12个里程碑

人工智能演进之路:从符号逻辑到自主智能体的12个里程碑

1. 符号逻辑时代:人工智能的奠基(1950s-1970s)1956年达特茅斯会议上,约翰麦卡锡首次提出"人工智能"术语时,研究者们手中的工具只有数学逻辑和符号系统。这个阶段的AI像一位严谨的数学家,试图用形…

2026/7/13 15:17:31阅读更多 →
阅读APP书源配置深度解析:从基础部署到高级优化

阅读APP书源配置深度解析:从基础部署到高级优化

阅读APP书源配置深度解析:从基础部署到高级优化 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 在开源阅读生态中,书源配置的质量直接决定了阅读体验的优劣。Yuedu项目作为一个精…

2026/7/13 18:32:49阅读更多 →
洛雪音乐音源完全指南:如何选择最适合你的免费音乐源

洛雪音乐音源完全指南:如何选择最适合你的免费音乐源

洛雪音乐音源完全指南:如何选择最适合你的免费音乐源 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 洛雪音乐开源音源项目是一个专为洛雪音乐播放器设计的音源集合库,通过…

2026/7/13 18:32:49阅读更多 →
深度实战:从零开始掌握AlphaFold3蛋白质结构预测

深度实战:从零开始掌握AlphaFold3蛋白质结构预测

深度实战:从零开始掌握AlphaFold3蛋白质结构预测 【免费下载链接】alphafold3 AlphaFold 3 inference pipeline. 项目地址: https://gitcode.com/gh_mirrors/alp/alphafold3 想象一下,你是一名药物研发科学家,正在研究一种新型靶点蛋白…

2026/7/13 18:32:49阅读更多 →
Haier智能家居集成深度解析:HomeAssistant中海尔设备的技术实现与架构设计

Haier智能家居集成深度解析:HomeAssistant中海尔设备的技术实现与架构设计

Haier智能家居集成深度解析:HomeAssistant中海尔设备的技术实现与架构设计 【免费下载链接】haier 海尔智能家居设备接入HomeAssistant 项目地址: https://gitcode.com/gh_mirrors/ha/haier 海尔智家设备接入HomeAssistant集成插件是一款专为解决智能家居设备…

2026/7/13 18:32:49阅读更多 →
如何快速上手AnyFlow-Wan2.1-T2V-1.3B-Diffusers:5分钟从安装到生成首个视频

如何快速上手AnyFlow-Wan2.1-T2V-1.3B-Diffusers:5分钟从安装到生成首个视频

如何快速上手AnyFlow-Wan2.1-T2V-1.3B-Diffusers:5分钟从安装到生成首个视频 【免费下载链接】AnyFlow-Wan2.1-T2V-1.3B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers 想要体验AI视频生成的魅力吗&…

2026/7/13 18:32:49阅读更多 →
终极免费风扇控制方案:FanControl让你的电脑静音又凉爽

终极免费风扇控制方案:FanControl让你的电脑静音又凉爽

终极免费风扇控制方案:FanControl让你的电脑静音又凉爽 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…

2026/7/13 18:27:49阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/13 4:47:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/13 4:52:09阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →