1. 项目背景与核心价值
在移动应用开发中,星级评分组件是最基础却又最容易被忽视的交互元素之一。最近在HarmonyOS 6环境下重构一个电商项目时,我发现现有的评分组件存在三个致命问题:动画生硬、自定义能力弱、性能开销大。这促使我重新设计了一套评分组件,最终实现了40%的渲染性能提升和17种自定义样式支持。
这个组件最核心的创新点在于:
- 基于HarmonyOS的声明式UI特性重构绘制逻辑
- 引入贝塞尔曲线实现手势跟随动画
- 支持SVG矢量图标与位图双模式渲染
- 内置四种国际通用的评分计算算法
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 渲染层优化方案
传统评分组件通常采用Stack嵌套多个Image的方式实现,这在HarmonyOS中会导致严重的布局重绘。我们改用Canvas统一绘制方案:
typescript复制Canvas(this.context)
.width('100%')
.height('100%')
.onReady(() => {
this.drawStars()
})
关键优化点:
- 使用Path2D缓存星型路径
- 开启硬件加速渲染
- 实现离屏Canvas预渲染
2.2 动画引擎实现
为达到iOS级跟手效果,我们设计了二级动画系统:
- 触摸动画:基于手指移动距离实时计算星级
typescript复制Gesture({
onMove(event) {
const offsetX = event.offsetX
this.currentRating = this.calculateRating(offsetX)
this.playBounceAnimation()
}
})
- 确认动画:使用弹性曲线模拟物理效果
typescript复制animateTo({
duration: 300,
curve: Curve.EaseOut,
onFinish() {
this.showRatingTips()
}
}, () => {
this.rating = targetValue
})
3. 核心功能实现
3.1 多样式支持架构
通过装饰器模式实现样式
