在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

作者:duluo
SDK 版本:HarmonyOS API 24 (Next)
开发工具:DevEco Studio
语言框架:ArkTS + ArkUI
字数:约 9600 字


目录

  1. 引言
  2. 产品概念与偶像模型
  3. 两 Tab 架构设计
  4. 首页偶像列表
  5. 应援系统与数据更新
  6. 创作引导页面
  7. 详情弹窗设计
  8. 色彩设计与角色搭配
  9. 编译错误全记录
  10. 第四十款 App 全景回顾
  11. 结语

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 给开发者的建议

  1. 连续零错误不是天赋,是习惯——当你习惯了在写代码时自动避坑,零错误就是常态
  2. 代表色系统增加辨识度——给每个角色一个颜色,用户看一眼就知道是谁
  3. 第 40 款 App 和第 1 款的差距不在代码能力,在心态——第 1 款觉得"我能行吗",第 40 款觉得"开干"
  4. 40 款 App 不是终点——第 41 款正在路上

11.4 致谢

40 款 App、40 篇博客、约 400,000 字。

感谢每一位从第 1 篇读到第 40 篇的读者。

现在,打开 DevEco Studio,去创造属于你自己的第 1 款 App 吧。


(全文完)

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐