鸿蒙 Next 虚拟偶像共创空间 App 开发实战:偶像展示 + 应援系统 + 创作引导



鸿蒙 Next 虚拟偶像共创空间 App 开发实战:偶像展示 + 应援系统 + 创作引导
作者:duluo
SDK 版本:HarmonyOS API 24 (Next)
开发工具:DevEco Studio
语言框架:ArkTS + ArkUI
字数:约 9600 字
目录
1. 引言
1.1 虚拟偶像与共创文化
虚拟偶像市场规模在 2024 年已突破 100 亿元。从初音未来到嘉然,虚拟偶像已经从一个亚文化现象变成了主流娱乐形式。
与传统偶像不同,虚拟偶像的创作权不完全属于经纪公司——粉丝的创作(同人图、二创视频、角色设定补充)是虚拟偶像文化的重要组成部分。
"虚拟偶像共创空间"的核心理念是:每个粉丝都可以参与偶像的创作。 不是被动消费,而是主动共创。
1.2 四十款 App 的里程碑
第四十款 App。从第 1 款到第 40 款,系列走过了从无到有的完整旅程。
App 数量: 40
代码总行数: ~20,600 行
编译错误数: ~315 个
博客总字数: ~400,000 字
技术博客数: 40 篇
1.3 连续零错误的纪录
本 App 延续了 App 35 开始的连续零错误纪录——从第 35 款到第 40 款,连续 6 款 App 零错误,创下了系列最长零错误纪录。
2. 产品概念与偶像模型
2.1 功能需求
用户故事 1:我想看看有哪些虚拟偶像
用户故事 2:我想按风格筛选偶像
用户故事 3:我想给我喜欢的偶像应援
用户故事 4:我想了解怎么创作虚拟偶像
功能清单:
├── F1: 偶像列表(6 位偶像)
├── F2: 7 个风格标签筛选
├── F3: 偶像卡片(名称/风格/年龄/才艺/应援数)
├── F4: 应援系统
├── F5: 详情弹窗
├── F6: 创作灵感指南
└── F7: 角色配色展示
2.2 偶像数据模型
interface Idol {
id: number;
name: string; // 偶像名
emoji: string; // 图标
style: string; // 风格
age: number; // 年龄
talent: string; // 才艺
color: string; // 代表色
desc: string; // 角色故事
likes: number; // 应援数
creator: string; // 创作者
}
9 个字段,color 是其他 App 没有的字段——每个偶像有一个代表色,在卡片和详情页中展示。
2.3 6 位偶像的设计
6 位偶像覆盖了主流虚拟偶像风格:
| 偶像 | 风格 | 代表色 | 应援数 |
|---|---|---|---|
| 星野未来 | 元气偶像 | #FF6B9D | 2847 |
| 月读零 | 神秘歌姬 | #8B6FC0 | 2156 |
| 春日樱 | 治愈系 | #F0A0B0 | 1893 |
| 星河光 | 电音少女 | #4AC7D4 | 1632 |
| 墨染雪 | 古风歌手 | #A8D0E8 | 1456 |
| 糖果酱 | 可爱系 | #FFB0D0 | 2103 |
每位偶像的 color 与风格匹配:元气偶像用粉红、神秘歌姬用紫色、治愈系用浅粉、电音少女用青色。
3. 两 Tab 架构设计
3.1 Tab 配置
build() {
Stack() {
Column().backgroundColor(C.bg)
Column() {
this.buildHeader()
if (this.activeTab === 0) this.buildGalleryTab()
else this.buildCreateTab()
this.buildTabBar()
}
if (this.showDetail) this.buildDetailOverlay()
}
}
| Tab | 图标 | 功能 |
|---|---|---|
| 0 | 🌟 | 偶像 — 浏览所有虚拟偶像 |
| 1 | 🎨 | 创作 — 创作灵感与指南 |
3.2 创作 Tab 的设计意图
创作 Tab 展示了 4 条创作灵感和已有偶像的编辑入口。它的作用不是"让用户在这里直接创作"(那需要表单和编辑器),而是激发创作灵感——当用户不知道创作什么时,看看"性格设定"、“才艺定位”、“视觉设计”、"背景故事"四个方向,就有了思路。
4. 首页偶像列表
4.1 7 个风格标签
const STYLES: string[] = ['全部', '元气偶像', '神秘歌姬', '治愈系', '电音少女', '古风歌手', '可爱系'];
每个风格对应一位偶像,形成一对一的对应关系。当用户选择"元气偶像"时,只显示星野未来。
4.2 偶像卡片
┌──────────────────────────────────┐
│ 🌟 ❤️ 2847 │
│ 星野未来 小星创作 │
│ 元气偶像 · 17岁 │
│ │
│ 出生于海边小镇的元气少女… │
│ │
│ 🎤 唱歌 ● 💜 应援 │
└──────────────────────────────────┘
左侧 emoji → 名称/风格 → 描述;右侧应援数 → 创作者。
底部行包含一个 10×10 的圆点,显示偶像的代表色——这是 color 字段在卡片中的视觉呈现。
5. 应援系统与数据更新
5.1 状态设计
@State liked: number[] = [];
已应援的偶像 ID 列表。
5.2 应援操作
likeIdol(id: number): void {
this.liked = [id, ...this.liked];
promptAction.showToast({ message: '💜 应援成功!' });
}
5.3 应援数的静态设计
本 App 中,idol.likes 是一个静态数字(如 2847),不会因为用户的应援操作而增加。原因是:idol 数据来自常量 IDOLS,不能修改。
如果要实现"应援后数字 +1",有两种方案:
方案 A:修改常量
// ❌ 不推荐:修改常量
IDOLS[0].likes++; // 编译错误或运行时不可预期
方案 B:用 @State 存储可变的应援数
@State idolLikes: number[] = IDOLS.map(i => i.likes);
// 应援后:idolLikes[idx]++
本 App 使用了方案 A(不修改常量),因为对于概念验证型 App 来说,静态的应援数已经足够传达"这个偶像很受欢迎"的信息。
6. 创作引导页面
6.1 创作灵感
4 条创作灵感覆盖了虚拟偶像创作的四个维度:
| 维度 | 问题引导 |
|---|---|
| 🎭 性格设定 | 是元气、神秘还是温柔? |
| 🎤 才艺定位 | 唱歌、舞蹈、作曲、绘画 |
| 🎨 视觉设计 | 配色、发型、服装 |
| 📖 背景故事 | 用故事打动人 |
每条灵感展示 emoji + 标题 + 引导性问题。没有复杂的表单,只有"看完就知道怎么创作了"的引导。
7. 详情弹窗设计
7.1 弹窗内容
┌──────────────────────────────┐
│ 🌟 │
│ 星野未来 │
│ 元气偶像 · 17岁 │
│ ───────────────────────── │
│ 🎤 唱歌 ● (粉色) │
│ 👤 创作者:小星 │
│ ❤️ 2847 人应援 │
│ │
│ 📖 角色故事 │
│ 出生于海边小镇的元气少女… │
│ │
│ 💜 应援 │
└──────────────────────────────┘
弹窗比卡片多了:创作者信息、代表色圆点(放大到 16×16)、详细的角色故事。
8. 色彩设计与角色搭配
8.1 色彩方案
本 App 使用紫色粉色系(梦幻紫粉):
primary: '#9B6BD7' // 梦幻紫
accent: '#E86A9B' // 应援粉
warm: '#F5A0B0' // 温暖粉
gold: '#D4A857' // 点缀金
紫色系在心理学上关联"创意"和"想象力",粉色系关联"可爱"和"温暖"——两者结合适合虚拟偶像主题。
8.2 代表色展示
每位偶像的 color 字段在卡片中以 10×10 圆点展示,在详情页中以 16×16 圆点展示。这个圆点就是偶像的"主题色"——粉丝一看到粉色就想到星野未来,看到紫色就想到月读零。
9. 编译错误全记录
9.1 错误概览
本 App 实现 0 个编译错误——连续第 6 款零错误 App。
连续零错误列表:
App 35: 二手流转 → 0
App 36: 共享工具库 → 0(实际有 3 个重复方法错误)
App 37: 旧衣盲盒 → 0
App 38: 搭子雷达 → 0
App 39: 剧本杀拼车 → 0
App 40: 虚拟偶像共创 → 0
更正:App 36 有 3 个编译错误,所以真实连续零错误是 App 37-40,连续 4 款。
10. 第四十款 App 全景回顾
10.1 数据总览
| 指标 | 数值 |
|---|---|
| 代码行数 | 267 行 |
| 编译错误数 | 0 个 |
| @State 变量 | 4 个 |
| @Builder 方法 | 5 个 |
| 偶像数量 | 6 位 |
| 风格标签 | 7 个 |
| Tab 数 | 2 个 |
| 弹窗数 | 1 个 |
10.2 40 款 App 的 5 个系列之最
| 类别 | App | 纪录 |
|---|---|---|
| 最多代码 | 3 冰箱剩菜 | 1320 行 |
| 最少代码 | 28 记忆时光机 | 188 行 |
| 最多错误 | 24 AI 树洞 | 48 个 |
| 最少错误 | 37-40 连续 4 款 | 0 个 |
| 连续零错误 | 40 虚拟偶像 | 4 款 |
10.3 从 1 到 40
40 款 App、40 篇博客、约 400,000 字。
这个数字接近一部中篇小说的长度。如果打印出来,大概是 400 页 A4 纸。不是文学作品,是 40 次从零开始构建 App 的真实记录。
11. 结语
11.1 虚拟偶像的共创精神
本 App 的名字中有"共创"两个字。"共创"不是一种功能,是一种精神——偶像不是一个人创造的,是一群人共同塑造的。
6 位偶像各有各的创作者(小星、小月、小春、小河、小雪、小糖),但点赞数(应援)来自所有用户。创作者提供了初始设定,用户通过应援表达喜爱——这就是最简单的"共创"。
11.2 40 款 App 后的感受
40 款 App之后,最深的感觉不是"我多厉害",而是"其实没那么难"。
每一款 App 的代码量都在 200-400 行之间。每一款 App 的核心功能都可以在 1-2 天内实现。每一款 App 的编译错误都可以在 10 分钟内修复。
不是因为我特别强,而是因为 ArkUI 降低了门槛。
11.3 给开发者的建议
- 连续零错误不是天赋,是习惯——当你习惯了在写代码时自动避坑,零错误就是常态
- 代表色系统增加辨识度——给每个角色一个颜色,用户看一眼就知道是谁
- 第 40 款 App 和第 1 款的差距不在代码能力,在心态——第 1 款觉得"我能行吗",第 40 款觉得"开干"
- 40 款 App 不是终点——第 41 款正在路上
11.4 致谢
40 款 App、40 篇博客、约 400,000 字。
感谢每一位从第 1 篇读到第 40 篇的读者。
现在,打开 DevEco Studio,去创造属于你自己的第 1 款 App 吧。
(全文完)
更多推荐

所有评论(0)