HarmonyOS应用《玄象》开发实战:FortuneTimelinePage 运势时间线:Timeline 自定义组件 + List 虚拟滚动

阅读时长:约 19 分钟 | 难度:★★★★☆ | 篇章:第 6 篇 · 命理八字模块

对应源码:entry/src/main/ets/pages/mingli/FortuneTimelinePage.ets

前言

流年运势时间线是玄象项目命理模块的"预测"界面。用户可选择年份查看该年的整体运势评分(事业/财运/健康/爱情),并通过左右箭头导航切换年份。本篇将深入剖析玄象项目运势时间线的实现:从 FortuneItem 数据结构、FortuneBar 运势评分条、Canvas 五行生克图绘制,到年份选择器交互。掌握这套运势时间线实现方法论,您就能为任何 HarmonyOS 应用构建年份级运势展示。

提示:玄象项目运势时间线包含事业、财运、健康、爱情四维评分,以及五行生克图与流年干支展示。

一、FortuneItem 数据结构

1.1 接口定义

typescript 复制代码
interface FortuneItem {
  year: number;       // 年份
  ganzhi: string;     // 干支
  career: number;     // 事业评分 0-100
  wealth: number;     // 财运评分 0-100
  health: number;     // 健康评分 0-100
  love: number;       // 爱情评分 0-100
  summary: string;    // 整体运势简述
}

二、年份选择器

2.1 左右箭头导航

typescript 复制代码
Row({ space: 8 }) {
  Text('◀')
    .fontSize(20)
    .fontColor(Colors.PRIMARY_GOLD)
    .onClick(() => { this.selectedYear--; this.updateSelection(); })
  Text(`${this.selectedYear}年`)
    .fontSize(20)
    .fontWeight(FontWeight.Bold)
    .fontColor(Colors.PRIMARY_GOLD)
  Text('▶')
    .fontSize(20)
    .fontColor(Colors.PRIMARY_GOLD)
    .onClick(() => { this.selectedYear++; this.updateSelection(); })
}
.justifyContent(FlexAlign.Center)

三、五行生克图

3.1 Canvas 绘制

typescript 复制代码
private drawWuxingChart(canvas: CanvasRenderingContext2D, w: number, h: number): void {
  const cx = w / 2, cy = h / 2;
  const r = Math.min(w, h) / 2 - 20;
  const wuxingOrder = ['木', '火', '土', '金', '水'];
  const wuxingColors = ['#4CAF50', '#F44336', '#FFC107', '#E0E0E0', '#2196F3'];

  // 生克箭头
  for (let i = 0; i < 5; i++) {
    const angle = (i * 72 - 90) * Math.PI / 180;
    // 五行文字
    canvas.fillStyle = wuxingColors[i];
    canvas.font = 'bold 16px sans-serif';
    canvas.fillText(wuxingOrder[i], cx + r * Math.cos(angle), cy + r * Math.sin(angle));
  }
}

四、运势评分条

4.1 FortuneBar Builder

typescript 复制代码
@Builder
FortuneBar(label: string, value: number, color: string) {
  Row({ space: 8 }) {
    Text(label)
      .fontSize(14)
      .fontColor(Colors.TEXT_PRIMARY)
      .width(50)
    Progress({ value, total: 100, type: ProgressType.Linear })
      .width(200)
      .color(color)
      .backgroundColor('#333333')
    Text(`${value}分`)
      .fontSize(12)
      .fontColor(Colors.TEXT_SECONDARY)
  }
}

五、运势时间线设计总结

5.1 页面结构

区域 组件 内容
年份选择 Row ◀ 2026年 ▶
五行生克图 Canvas 五行相生相克
运势总览 Column 干支 + 描述
评分条 4 × FortuneBar 事业/财运/健康/爱情

总结

本篇以玄象项目运势时间线页为蓝本,深入剖析了 ArkUI 年份级运势展示的实现:从 FortuneItem 数据结构、FortuneBar 运势评分条、Canvas 五行生克图绘制,到年份选择器交互。掌握这套运势时间线实现方法论,您就能为任何 HarmonyOS 应用构建年份级运势展示。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

相关推荐
aqi002 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
熊猫钓鱼>_>3 小时前
Flutter app_settings 鸿蒙适配实战:Intent 体系到 Want 的跨越
flutter·华为·harmonyos·openharmony·intent·want
贾伟康6 小时前
【句匠|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·应用上架·appgallery·发布审核
贾伟康7 小时前
【句匠|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
harmonyos·arkts·数据持久化·appstorage·preferences
贾伟康9 小时前
【句匠|16】HarmonyOS ArkTS 多设备布局实战:适配手机、平板和 PC/2in1 的窗口变化
harmonyos·arkts·arkui·响应式布局·多设备适配
小雨青年10 小时前
【HarmonyOS 7 平行视界深度实战】03 购物模式怎么实现连续浏览和左右推挤
华为·harmonyos
SuperHeroWu712 小时前
HarmonyOS Dev Assistant (HarmonyOS开发助手)如何打通元服务开发全流程
ai·agent·harmonyos·vs code·元服务·hbuilderx·assistant
熊猫钓鱼>_>12 小时前
用 OHAudioSuite 空间渲染节点搭一座「3D 有声博物馆」——从三种模式到 FreeBuds 头追的实战记录
c++·3d·ai·harmonyos·arkts·audio·ohaudiosuite
OH_TPC12 小时前
HarmonyOS APP开发---"心动卡"社交匹配App,需要用到这个库
harmonyos
光锥智能12 小时前
HUAWEI WATCH 6系列正式发布:鸿蒙AI手表,智慧健康旗舰
人工智能·华为·harmonyos