HarmonyOS应用开发实战:猫猫大作战-模运算条件样式、三元表达式样式、enum 映射色、等级色函数四种套路
前言上一篇我们用双层ForEach把 5×8 棋盘网格渲出来但每格背景色写的是(rowcol)%2 0 ? #F0F4F8 : #E6EDF3——这个「模运算条件样式」一眼看似简单实则是 ArkUI 响应式样式的核心套路三元表达式根据数据动态返回样式值。这种套路在棋盘色、状态色、等级色、性别色等场景反复出现。本篇以「猫猫大作战」棋盘隔行变色为锚点把模运算条件样式、三元表达式样式、enum 映射色、等级色函数四种套路讲透。读完本篇你将能独立写出棋盘格变色、等级色映射、状态色切换、条件圆角四种动态样式。提示本系列不讲 ArkTS 基础语法与环境搭建假设你已跟完第 1–13 篇。一、场景拆解棋盘色三元表达式回顾GameView第 1 层棋盘背景// 来源entry/src/main/ets/pages/Index.ets GameView() 棋盘格 Stack() { Text().fontSize(20) } .width(${100 / COLS}%).height(${100 / ROWS}%) .backgroundColor((row col) % 2 0 ? #F0F4F8 : #E6EDF3)核心.backgroundColor(...)的参数是一个三元表达式根据(rowcol)%2的奇偶性动态返回浅色或深色。二、三元表达式在样式中的合法位ArkUI 的属性方法.fontSize/.backgroundColor/.borderRadius等接受任意返回合法类型的表达式——包括三元、函数调用、常量。2.1 三元表达式样式.backgroundColor((row col) % 2 0 ? #F0F4F8 : #E6EDF3) .fontSize(isTitle ? 20 : 14) .borderRadius(isCard ? 12 : 0) .fontColor(isActive ? #2ECC71 : #95A5A6)语法条件 ? 真值 : 假值。条件为true返回真值否则返回假值。2.2 嵌套三元多条件.backgroundColor( row 0 ? #FFC107 : // 第 0 行黄预警行 row 1 ? #E74C3C : // 第 1 行红危险行 row 2 ? #FFFFFF : // 第 2 行白安全行 #F8F9FA // 其余浅灰 )嵌套三元用于多条件分支——但超过 3 层可读性崩应改用函数第 4 节讲。2.3 三元 vs if/else// ✅ 三元在属性参数里合法 .backgroundColor((row col) % 2 0 ? #F0F4F8 : #E6EDF3) // ❌ if/else不能写在属性参数里 .backgroundColor(if (cond) { #F0F4F8 } else { #E6EDF3 }) // 语法错关键ArkUI 属性参数里只能用三元不能用 if/else——if是语句不是表达式没有返回值。三、模运算的四种棋盘色套路3.1(rowcol)%2棋盘格本项目(row col) % 2 0 ? #F0F4F8 : #E6EDF3色分布相邻格永远异色经典棋盘。行\列01230浅深浅深1深浅深浅2浅深浅深3.2row%2行间变色row % 2 0 ? #F8F9FA : #FFFFFF色分布相邻行异色同行同色。适合列表项变色。3.3col%2列间变色col % 2 0 ? #F8F9FA : #FFFFFF色分布相邻列异色同列同色。适合横向卡片变色。3.4(row*2col)%3三色循环[(row * 2 col) % 3, #FFC107, #FF9800, #E74C3C] // 伪代码实际用函数色分布三色循环视觉更丰富但易花慎用。四、enum 等级色映射实战打开GameTypes.ets猫咪有 6 级export enum CatLevel { LEVEL_1, // 0 LEVEL_2, // 1 LEVEL_3, // 2 LEVEL_4, // 3 LEVEL_5, // 4 LEVEL_6 // 5 }每级对应一个颜色渲染时要根据cat.level返回对应色。嵌套三元写 6 层就崩应改用函数 switchgetCatColor(level: CatLevel): string { switch (level) { case CatLevel.LEVEL_1: return #FFC107 // 黄 case CatLevel.LEVEL_2: return #FF9800 // 橙 case CatLevel.LEVEL_3: return #E74C3C // 红 case CatLevel.LEVEL_4: return #9B59B6 // 紫 case CatLevel.LEVEL_5: return #2ECC71 // 绿 case CatLevel.LEVEL_6: return #3498DB // 蓝 default: return #FFC107 } } // 使用 Text(this.getCatEmoji(cat.level)) .fontSize(30) .backgroundColor(this.getCatColor(cat.level))4.1 Record 映射表替代 switchconst CAT_COLOR: Recordnumber, string { [CatLevel.LEVEL_1]: #FFC107, [CatLevel.LEVEL_2]: #FF9800, [CatLevel.LEVEL_3]: #E74C3C, [CatLevel.LEVEL_4]: #9B59B6, [CatLevel.LEVEL_5]: #2ECC71, [CatLevel.LEVEL_6]: #3498DB } getCatColor(level: CatLevel): string { return CAT_COLOR[level] ?? #FFC107 // ?? 防空 }Record 映射表优势O(1) 查询比 switch O(n) 快。数据驱动颜色改一处即可不动函数。易扩展加级只需加一行。提示ArkTS 严格模式禁anyRecordK, V是真正的字典映射类型替代 JS 的{}动态对象。本系列第 115 篇会专讲Record。4.2 资源引用替代硬编码色const CAT_COLOR: Recordnumber, Resource { [CatLevel.LEVEL_1]: $r(app.color.cat_level_1), [CatLevel.LEVEL_2]: $r(app.color.cat_level_2), // ... }用$r(app.color.xxx)资源引用替代#FFC107硬编码——暗色模式切换自动适配。本系列第 28 篇会专讲暗色模式。五、状态色切换实战GameState也有色映射getGameStateColor(state: GameState): string { switch (state) { case GameState.IDLE: return #95A5A6 // 灰待机 case GameState.PLAYING: return #2ECC71 // 绿游玩 case GameState.PAUSED: return #FFC107 // 黄暂停 case GameState.GAME_OVER: return #E74C3C // 红结束 default: return #95A5A6 } } // 使用状态指示器 Circle({ width: 12, height: 12 }).fillColor(this.getGameStateColor(this.gameState))状态色语义状态色语义IDLE灰静默PLAYING绿活跃PAUSED黄等待GAME_OVER红警告六、条件圆角实战圆角也能用三元动态控// 棋盘格方角 Stack() { /* ... */ } .borderRadius(0) // 棋子圆角 Text(this.getCatEmoji(cat.level)) .borderRadius(cat.level 5 ? 50 : 12) // 高级猫咪更圆5 级用 50近圆 // 卡片中圆角 Column() { /* ... */ } .borderRadius(isModal ? 24 : 12) // 模态卡片更圆条件圆角套路根据数据动态控圆角让视觉语义随状态变化。七、完整代码四种动态样式对比7.1 棋盘色三元表达式Stack() { Text().fontSize(20) } .width(${100 / COLS}%).height(${100 / ROWS}%) .backgroundColor((row col) % 2 0 ? #F0F4F8 : #E6EDF3)7.2 等级色函数 switchgetCatColor(level: CatLevel): string { switch (level) { case CatLevel.LEVEL_1: return #FFC107 case CatLevel.LEVEL_2: return #FF9800 case CatLevel.LEVEL_3: return #E74C3C case CatLevel.LEVEL_4: return #9B59B6 case CatLevel.LEVEL_5: return #2ECC71 case CatLevel.LEVEL_6: return #3498DB default: return #FFC107 } } Text(this.getCatEmoji(cat.level)) .fontSize(30) .backgroundColor(this.getCatColor(cat.level)) .borderRadius(8)7.3 状态色Record 映射表const STATE_COLOR: Recordnumber, string { [GameState.IDLE]: #95A5A6, [GameState.PLAYING]: #2ECC71, [GameState.PAUSED]: #FFC107, [GameState.GAME_OVER]: #E74C3C } getGameStateColor(state: GameState): string { return STATE_COLOR[state] ?? #95A5A6 } Circle({ width: 12, height: 12 }).fillColor(this.getGameStateColor(this.gameState))7.4 条件圆角三元嵌套Text(this.getCatEmoji(cat.level)) .fontSize(30) .borderRadius(cat.level 5 ? 50 : 12) // 5 级近圆其余小圆角八、调试技巧动态样式怎么调console.info打色值Builder 里加console.info(color, this.getCatColor(cat.level))追实际渲染色。临时固定色验证把三元临时改成固定#F00红看所有格是否都红——验证表达式是否被调用。密钥冲突排查格子少几个查(rowcol)%2是否依赖了重复的 row/col 值。真机看色预览器渲染接近真机但某些色相可能因屏密度差异以真机为准。九、性能与最佳实践三元表达式比函数调用快简单 2 分支用三元避免函数调用开销。复杂分支用函数 switch/Record超 3 分支别嵌套三元可读性崩。Record 映射表 O(1) 查询比 switch O(n) 快大数据量必用。资源引用替硬编码色$r(app.color.xxx)支持暗色模式硬编码不支持。总结本篇我们从棋盘隔行变色切入掌握三元表达式条件样式、模运算四种棋盘色套路、enum 等级色映射switch/Record、状态色切换、条件圆角五大要点并给出了四种动态样式的完整代码。核心要点属性参数用三元非 if/else简单 2 分支用三元复杂分支用函数 Record 映射资源引用替硬编码。下一篇我们将继续游戏页拆解猫咪渲染的 Emoji Text 与圆形背景。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源「猫猫大作战」项目源码本仓库entry/src/main/ets/pages/Index.etsForEach 循环渲染官方指南文本显示 (Text/Span) 官方指南Shape 容器官方指南开源鸿蒙跨平台社区HarmonyOS 开发者官方文档首页系列索引本仓库articles/INDEX.md

相关新闻

通义千问与阿里云Function Compute深度耦合:Serverless AI应用开发全流程,含6个可运行代码模板

通义千问与阿里云Function Compute深度耦合:Serverless AI应用开发全流程,含6个可运行代码模板

更多请点击: https://intelliparadigm.com 第一章:通义千问与阿里云Function Compute深度耦合:Serverless AI应用开发全流程,含6个可运行代码模板 通义千问(Qwen)大模型通过阿里云Function Compute&#x…

2026/7/27 23:58:29阅读更多 →
CEEMDAN-VMD与CNN-BiLSTM混合模型在风电预测中的应用

CEEMDAN-VMD与CNN-BiLSTM混合模型在风电预测中的应用

1. 项目概述 在风电功率预测领域,多变量时间序列预测一直是个棘手的问题。风速、风向、温度、湿度等多个变量之间存在着复杂的非线性关系,再加上环境噪声的干扰,传统预测方法往往捉襟见肘。我在实际项目中尝试过ARIMA、SVM等各种传统模型&…

2026/7/27 23:58:29阅读更多 →
谁说的YOLO只能目标检测?手把手教你解锁它隐藏的热力图视野!

谁说的YOLO只能目标检测?手把手教你解锁它隐藏的热力图视野!

谁说的YOLO只能目标检测?手把手教你解锁它隐藏的热力图视野! 大家好,我是你们的老朋友——一个专注搞技术、不爱讲废话的博主。今天我们要聊一个很“反直觉”的话题:YOLO,这个被大家公认为“目标检测之王”的模型&…

2026/7/27 23:58:29阅读更多 →
PHP健康饮食推荐系统毕业设计:从算法到部署的完整实现指南

PHP健康饮食推荐系统毕业设计:从算法到部署的完整实现指南

1. 项目背景与核心价值每到毕业季,计算机相关专业的同学都会面临一个共同的挑战:如何完成一个既有技术深度、又能体现个人能力的毕业设计。一个典型的选题是“健康饮食推荐系统”,它结合了Web开发、数据库设计和算法应用,是检验学…

2026/7/28 1:22:57阅读更多 →
科研处的“表“劫

科研处的“表“劫

一、科研处正在变成”填表机器” 如果你问一个科研处的人,现在最费时间的是什么,十有八九他会告诉你两个字:填表。 项目申报要填表,过程管理要填表,结项验收要填表。成果登记、专利维护、转化报备——每一条政策口子…

2026/7/28 1:22:57阅读更多 →
AWK多行文本解析实战:从日志处理到性能优化

AWK多行文本解析实战:从日志处理到性能优化

1. 多行文本解析的常见场景与核心挑战处理多行文本数据是日常开发中的高频需求。从日志分析到配置文件处理,再到数据清洗,我们经常需要从结构复杂或半结构化的文本中提取特定信息。以Nginx访问日志为例,单条记录可能跨越多行,包含…

2026/7/28 1:22:57阅读更多 →
Skywork Tags团队AI智能体:工作群聊协作部署与优化指南

Skywork Tags团队AI智能体:工作群聊协作部署与优化指南

这次我们来看昆仑万维天工3.2最新推出的Skywork Tags功能,这是一个让AI智能体直接"入职"工作群聊的协作工具。简单说,就是可以把AI助手拉进Slack、飞书、钉钉等日常办公群,让AI像真实团队成员一样参与讨论和协作。 Skywork Tags的核心价值在于"团队共享型Ag…

2026/7/28 1:22:57阅读更多 →
科研AI工具链实战:从零构建自动化写作与绘图工作流

科研AI工具链实战:从零构建自动化写作与绘图工作流

如果你是一名科研工作者、研究生或学术写作者,最近是否被这些场景困扰过? 面对一个全新的研究方向,感觉无从下手,不知道如何找到有价值且可行的研究选题。 论文初稿完成后,反复修改却总觉得语言生硬、逻辑不畅,离期刊要求的“学术英语”相去甚远。 绘制技术路线图、模…

2026/7/28 1:22:57阅读更多 →
07、设备文件:ALSA设备节点与声卡接口详解

07、设备文件:ALSA设备节点与声卡接口详解

文章目录概述一、/dev/snd 设备文件概览1.1 设备文件目录结构1.2 设备类型分类二、Control控制设备2.1 设备命名2.2 功能详解2.3 访问示例三、PCM音频流设备3.1 PCM设备命名规则3.2 设备编号含义3.3 常见PCM设备示例3.4 PCM设备工作流程四、其他设备类型4.1 Timer定时器设备4.2…

2026/7/28 1:20:57阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

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

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

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

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

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

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

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/26 19:05:21阅读更多 →