阅读时长:约 19 分钟 | 难度:★★★★★ | 篇章:第 5 篇 · 周易易学模块
对应源码:entry/src/main/ets/pages/yijing/GreatWheelPage.ets
前言
卦象大轮盘是玄象项目周易模块的特色交互页。用户通过旋转手势在轮盘上选择卦象,轮盘上的 64 卦按极坐标圆周排列,选中卦象后高亮显示。本篇将深入剖析玄象项目卦象大轮盘的实现:从极坐标圆周布局算法、rotate旋转属性、Gesture手势系统、PanGesture拖拽旋转,到选中态高亮与动画反馈。掌握这套大轮盘实现方法论,您就能为任何 HarmonyOS 应用打造旋转交互体验。
提示:极坐标布局是玄象项目的核心视觉语言——从五行环绕太极到卦象大轮盘,都基于同一套三角函数算法。
一、大轮盘布局
1.1 极坐标布局
privatecalculateHexagramPosition(index:number,total:number,centerX:number,centerY:number,radius:number):Position{constangle=(index*(360/total)-90)*Math.PI/180;return{x:centerX+radius*Math.cos(angle)-20,y:centerY+radius*Math.sin(angle)-20};}二、旋转手势
2.1 PanGesture 拖拽旋转
@StaterotationAngle:number=0;privatestartAngle:number=0;build(){Stack(){// 轮盘内容Image($r('app.media.great_wheel')).rotate({angle:this.rotationAngle}).animation({duration:200})// 卦象标签ForEach(this.hexagrams,(hexagram:HexagramInfo,index:number)=>{Text(hexagram.symbol).position(this.calculateHexagramPosition(index,64,cx,cy,r)).rotate({angle:-this.rotationAngle}).animation({duration:200})})}.gesture(PanGesture().onActionStart((event:GestureEvent)=>{this.startAngle=this.rotationAngle;}).onActionUpdate((event:GestureEvent)=>{constdx=event.fingerList[0].localX-cx;constdy=event.fingerList[0].localY-cy;constangle=Math.atan2(dy,dx)*180/Math.PI;this.rotationAngle=this.startAngle+angle;}).onActionEnd(()=>{// 对齐最近的卦象this.snapToNearest();}))}三、选中态高亮
3.1 选中卦象
@StateselectedIndex:number=0;privatesnapToNearest():void{constanglePerHexagram=360/64;constindex=Math.round(this.rotationAngle/anglePerHexagram)%64;this.selectedIndex=index;this.rotationAngle=index*anglePerHexagram;}四、大轮盘设计总结
4.1 页面结构
| 区域 | 组件 | 内容 |
|---|---|---|
| 轮盘背景 | Image/Canvas | 圆盘背景 |
| 卦象标签 | Text | 64 卦极坐标排列 |
| 指针 | Text | 固定指针指示选中卦象 |
| 选中信息 | Column | 当前选中卦象详情 |
总结
本篇以玄象项目卦象大轮盘为蓝本,深入剖析了 ArkUI 旋转交互实现:从极坐标圆周布局算法、rotate旋转属性、PanGesture拖拽旋转手势,到选中态高亮与动画反馈。掌握这套大轮盘实现方法论,您就能为任何 HarmonyOS 应用打造旋转交互体验。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- HarmonyOS 官方文档:PanGesture
- HarmonyOS 官方文档:rotate 属性
- HarmonyOS 官方文档:Gesture 手势
- HarmonyOS 官方文档:animation 动画
- 周易六十四卦:wikipedia.org/wiki/六十四卦
- 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net