news 2026/7/17 1:12:44

# [特殊字符] 画画模拟器 — 鸿蒙ArkTS完整技术解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# [特殊字符] 画画模拟器 — 鸿蒙ArkTS完整技术解析

应用定位:创意创作模拟类小应用
技术栈:HarmonyOS NEXT + ArkTS + Stage模型
源码行数:128行
核心亮点:10色调色板系统、笔刷粗细控制、创作计数、圆形颜色选择器、颜色名称映射


一、引言

画画模拟器是系列中第一个引入调色板系统的应用。它模拟了绘画创作的核心交互:选择颜色→调整笔刷→绘画。

技术新概念包括:

  • 10色调色板:10种不同颜色供选择
  • 颜色选中指示器:当前选中的颜色有边框高亮
  • 笔刷粗细调节:加粗和减细操作
  • 创作计数:记录绘画笔数
  • 颜色名称映射:将颜色值映射为人类可读的名称

二、需求分析

需求ID功能描述
F1画布展示模拟画布区域
F2调色板10种颜色可选择
F3笔刷调节加粗/减细笔刷
F4绘画操作点击画一笔
F5计数显示显示已画笔数
F6颜色名称显示当前颜色名称

三、调色板系统

3.1 10色调色板

private colors: string[] = ['#FF5722', '#FF9800', '#FFEB3B', '#4CAF50', '#2196F3', '#3F51B5', '#9C27B0', '#E91E63', '#000000', '#FFFFFF']; private colorNames: string[] = ['红', '橙', '黄', '绿', '蓝', '靛', '紫', '粉', '黑', '白'];

颜色选择覆盖了彩虹色 + 黑白,满足基本配色需求。

3.2 颜色选择器实现

Row() { ForEach(this.colors, (color: string, idx: number) => { Column() { Text(' ') .width(24) .height(24) .backgroundColor(color) .border({ width: this.currentColorIndex === idx ? 3 : 1, color: this.currentColorIndex === idx ? '#333' : '#CCC' }) .borderRadius(12) .margin({ right: 3 }) .onClick(() => { this.currentColorIndex = idx; this.brushColor = color; this.message = '选择了 ' + this.colorNames[idx] + ' 色 🎨'; }) } }) }

选中指示器:选中的颜色边框加粗(1→3px)并变深(#CCC→#333)。这是一种常见的UI选中反馈。


四、笔刷粗细控制

4.1 加减按钮

Button('➕ 加粗笔') .onClick(() => { this.brushSize = Math.min(30, this.brushSize + 2); this.message = '笔刷加粗到 ' + this.brushSize + 'px'; }) Button('➖ 减细笔') .onClick(() => { this.brushSize = Math.max(2, this.brushSize - 2); this.message = '笔刷减细到 ' + this.brushSize + 'px'; })

范围限制:2-30px之间。Math.minMath.max双端保护。

4.2 状态显示

Text('当前: ' + this.colorNames[this.currentColorIndex] + ' | 粗细: ' + this.brushSize + 'px') .fontSize(13) .fontColor('#999')

实时显示当前配色方案的所有参数。


五、画布抽象

Column() { Text('画布') .fontSize(36) Text('✏️ 已画 ' + this.drawCount + ' 笔') .fontSize(14) .fontColor('#999') } .width(220) .height(180) .backgroundColor('#FAFAFA') .border({ width: 2, color: '#DDD' }) .borderRadius(8) .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center)

由于ArkTS Canvas支持有限,这里用静态区域抽象画布——"画一笔"只增加计数而不真正绘制。


六、扩展思路

6.1 Canvas绘制

真正的画布需要使用 Canvas API:

Canvas(this.context) .width('100%') .height('100%') .onTouch((event) => { if (event.type === TouchType.Move) { this.context.moveTo(lastX, lastY); this.context.lineTo(event.x, event.y); this.context.stroke(); } })

6.2 撤销功能

@State history: CanvasImage[] = []; undo() { let prev = this.history.pop(); if (prev) { this.context.drawImage(prev, 0, 0); } }

6.3 保存作品

saveArt() { let image = this.context.toDataURL(); // 保存到本地 }

七、总结

画画模拟器展示了ArkTS在"创意工具模拟"场景的开发模式:

  1. 调色板系统:颜色数组 + 选中指示器
  2. 笔刷粗细控制:加减按钮 + 双端保护
  3. 颜色名称映射:十六进制到中文颜色名
  4. 画布抽象:静态区域模拟画布

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

HandheldCompanion:Windows掌机游戏体验的终极控制解决方案

HandheldCompanion:Windows掌机游戏体验的终极控制解决方案 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 如果你正在寻找一款能够彻底改变Windows掌机游戏体验的软件,那…

作者头像 李华
网站建设 2026/7/17 1:11:22

免费解锁Microsoft 365完整功能:Ohook终极激活方案完全指南

免费解锁Microsoft 365完整功能:Ohook终极激活方案完全指南 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/o…

作者头像 李华
网站建设 2026/7/17 1:04:03

JAVA练习296- 两数相加

题目概览 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都…

作者头像 李华
网站建设 2026/7/17 0:33:52

埋点驱动调优:TapTap 数据反推卡点、LTV 推算与 A/B 测试实战

本文是「放置游戏策划实战」系列第 7 篇。前面六篇(P1~P6)我们从概念、数值、系统三个层面搭起了放置游戏的设计框架。但再好的设计也经不起真实玩家的检验。 这一篇专门讲怎么用数据验证你前面做的所有假设。作为独立开发者,你最大的灵活优势…

作者头像 李华
网站建设 2026/7/17 0:24:55

OpenClaw 小龙虾部署避坑大全,路径 / 杀毒 / 初始化故障汇总

📌OpenClaw 工具定位与核心能力解析 许多用户仅将 OpenClaw 视为基础对话 AI,但其本质是一款能够全面操控本机软硬件的智能执行助手。在接收自然语言指令后,该工具会自动拆解复杂任务,调用相应的功能模块完成整套操作流程&#x…

作者头像 李华