
鸿蒙特效教程03-水波纹动画效果实现教程 原创
鸿蒙特效教程03-水波纹动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现漂亮的水波纹动画效果。
开发环境准备
- DevEco Studio 5.0.3
- HarmonyOS Next API 15
最终效果预览
我们将实现以下功能:
- 点击屏幕任意位置,在点击处生成一个水波纹
- 触摸并滑动屏幕,波纹会实时跟随手指位置生成
- 波纹从小到大扩散,同时逐渐消失
- 波纹颜色随机变化,增加视觉多样性
一、创建基础布局
首先,我们需要创建一个基础页面布局。这个布局包含一个占满屏幕的区域,用于展示水波纹动画。
这段代码创建了一个简单的页面,包含以下元素:
- 最外层是一个占满整个屏幕的
Column
- 内部是一个
Stack
组件,它允许我们将多个元素堆叠在一起 - 在
Stack
中放置了一个包含提示文本的Column
Stack
组件很重要,因为我们后续要在这里动态添加水波纹元素。
二、定义水波纹数据结构
在实现动画效果之前,我们需要先定义水波纹的数据结构。每个水波纹都有自己的位置、大小、颜色等属性:
使用@State
装饰器标记ripples
数组和isTouching
状态,这样当它们的内容发生变化时,UI会自动更新。我们还定义了一些用于跟踪触摸状态和位置的变量。
三、实现波纹绘制与点击事件
接下来,我们需要实现波纹的绘制,并处理基本的点击事件:
在这一步中,我们添加了以下内容:
- 使用
ForEach
遍历ripples
数组,为每个波纹创建一个Circle
组件 - 为提示文本添加了第二行,说明触摸滑动功能
- 添加了
createRipple
方法的基本结构(目前只打印坐标)
注意Circle
组件的定位方式:由于圆形是以左上角为基准定位的,而我们希望以圆心定位,所以需要从坐标中减去圆形半径(即size/2)。
四、实现水波纹创建逻辑
下一步,我们来实现水波纹的创建逻辑:
在这个方法中:
- 我们定义了一个颜色数组,每次随机选择一种颜色
- 创建一个新的波纹对象,初始大小为0,最大扩散尺寸为300像素
- 将新波纹添加到数组中,这会触发UI更新
- 调用
animateRipple
方法开始动画(下一步实现)
五、实现动画效果
现在,我们来实现波纹的扩散和消失动画:
这个方法使用了setInterval
定时器来创建动画,主要逻辑包括:
- 设置动画参数:总步数、帧间隔、每帧尺寸增量和透明度减量
- 每帧更新波纹的大小和透明度,实现从小到大、从清晰到透明的效果
- 使用
[...this.ripples]
创建数组的新实例,触发UI更新 - 当动画完成(步数达到总步数)或波纹被移除时,清除定时器
- 动画结束后从数组中移除该波纹,释放内存
至此,我们已经实现了基本的水波纹效果。下一步将添加触摸滑动功能。
六、实现触摸跟踪功能
最后,我们来实现触摸跟踪功能,让波纹能够跟随手指移动:
在这段代码中,我们使用onTouch
事件监听器来处理触摸事件,主要功能包括:
-
触摸开始(Down)时:
- 记录触摸位置
- 立即创建一个波纹
- 启动定时器,以固定间隔创建波纹
-
触摸移动(Move)时:
- 更新触摸位置
- 保持触摸状态,定时器会在新位置创建波纹
-
触摸结束(Up)或取消(Cancel)时:
- 停止触摸状态
- 清除定时器,不再创建新波纹
这样实现后,当用户触摸并滑动屏幕时,波纹会实时跟随手指位置生成,创造出一种水流般的视觉效果。
完整代码
下面是最终的完整代码:
总结
通过这个教程,我们学习了如何一步步实现水波纹动画效果:
- ArkUI 搭建基础布局,创建用于展示水波纹的容器
- @State 定义水波纹数据结构,设计存储和管理波纹的方式
- 实现基本的波纹绘制和触摸事件 onTouch
- 创建水波纹生成逻辑,包括随机颜色 Math.random
- 使用 setInterval 定时器实现波纹扩散和消失的动画效果
- 添加 TouchEvent 触摸跟踪功能,让波纹能够跟随手指滑动
这个简单而美观的水波纹效果可以应用在你的应用中的各种交互场景,例如按钮点击、图片查看、页面切换等。通过调整参数,你还可以创造出不同风格的波纹效果。
希望这个教程对你有所帮助,祝你在鸿蒙应用开发中创造出更多精彩的交互体验!
