往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)
- 鸿蒙开发焦点知识点,看这篇文章就够了
- 最新版!鸿蒙HarmonyOS Next应用开发实战学习路线
- 鸿蒙HarmonyOS NEXT开发技能最全学习路线指南
- 鸿蒙应用开发实战项目,看这一篇文章就够了(部门项目附源码)
显式动画 (animateTo)
提供全局animateTo显式动画接口来指定由于闭包代码导致的状态变化插入过渡动效。同属性动画,布局类改变宽高的动画,内容都是直接到止境状态,比方文字、Canvas的内容等,假如要内容跟随宽高变化,可以利用renderFit属性配置。
阐明:
从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
本模块功能依赖UI的实行上下文,不可在UI上下文不明确的地方利用。
卡片本领: 从API version 9开始,该接口支持在ArkTS卡片中利用。
从API version 10开始,可以通过利用UIContext中的animateTo来明确UI的实行上下文。
从API version 11开始,该接口支持在原子化服务中利用。
接口
animateTo(value: AnimateParam, event: () => void): void
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。
阐明:
- 在duration为0的动画闭包函数中改变属性,以实现停止该属性动画的效果。
- 假如需要在组件出现时创建动画,可以参考示例1,在onAppear中实现动画的创建。
- 不推荐在aboutToAppear、aboutToDisappear中调用动画。
- 假如在aboutToAppear中调用动画,自界说组件内的build还未实行,内部组件还未创建,动画机会过早,动画属性没有初值无法对组件产生动画。
- 实行aboutToDisappear时,组件即将烧毁,不能在aboutToDisappear内里做动画。
- 也可以利用组件内转场,在组件出现和消散时做动画。
- 组件内转场不支持的属性,可以参考示例2,利用animationTo实现组件消散动画效果。
参数:
参数类型是否必填描述valueAnimateParam是设置动画效果相干参数。event() => void是指定动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。 AnimateParam对象阐明
名称类型是否必填描述durationnumber否动画持续时间,单元为毫秒。
默认值:1000
卡片本领: 从API version 9开始,该接口支持在ArkTS卡片中利用。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。
阐明:
- 在ArkTS卡片上最大动画持续时间为1000毫秒,若超出则固定为1000毫秒。
- 设置小于0的值时按0处置惩罚。
- 设置浮点型类型的值时,向下取整。比方,设置值为1.2,按照1处置惩罚。temponumber否动画播放速率,值越大动画播放越快,值越小播放越慢,为0时无动画效果。
默认值:1.0
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。
阐明:
当设置小于0的值时按值为1处置惩罚。curveCurve | ICurve9+ | string否动画曲线。
默认值:Curve.EaseInOut
卡片本领: 从API version 9开始,该接口支持在ArkTS卡片中利用。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。delaynumber否动画延迟播放时间,单元为ms(毫秒),默认不延时播放。
默认值:0
取值范围:(-∞, +∞)
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。
阐明:
- delay>=0为延迟播放,delay<0表示提前播放。对于delay<0的情况:当delay的绝对值小于现实动画时长,动画将在开始后第一帧直接运动到delay绝对值的时刻的状态;当delay的绝对值大于等于现实动画时长,动画将在开始后第一帧直接运动到止境状态。其中现实动画时长等于单次动画时长乘以动画播放次数。
- 设置浮点型类型的值时,向下取整。比方,设置值为1.2,按照1处置惩罚。iterationsnumber否动画播放次数。默认播放一次,设置为-1时表示无限次播放。设置为0时表示无动画效果。
默认值:1
取值范围:[-1, +∞)
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。playModePlayMode否动画播放模式,默认播放完成后重头开始播放。
默认值:PlayMode.Normal
卡片本领: 从API version 9开始,该接口支持在ArkTS卡片中利用。
相干利用约束请参考PlayMode阐明。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。onFinish() => void否动画播放完成回调。
卡片本领: 从API version 9开始,该接口支持在ArkTS卡片中利用。
原子化服务API: 从API version 11开始,该接口支持在原子化服务中利用。finishCallbackType11+FinishCallbackType否在动画中界说onFinish回调的类型。
默认值:FinishCallbackType.REMOVED
卡片本领: 从API version 11开始,该接口支持在ArkTS卡片中利用。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中利用。expectedFrameRateRange11+ExpectedFrameRateRange否设置动画的盼望帧率。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中利用。 PlayMode阐明:
- PlayMode推荐利用PlayMode.Normal和PlayMode.Alternate,此场景下动画的第一轮是正向播放的。如利用PlayMode.Reverse和PlayMode.AlternateReverse,则动画的第一轮是逆向播放的,在动画刚开始时会跳变到终止状态,然后逆向播放动画。
- 利用PlayMode.Alternate或PlayMode.AlternateReverse时,开发者应包管动画终极状态和状态变量的取值一致,即应包管动画的最后一轮是正向播放的。利用PlayMode.Alternate时,iterations应为奇数。利用PlayMode.AlternateReverse时,iterations应为偶数。
- 不推荐利用PlayMode.Reverse,此场景下不仅会导致动画刚开始就跳变到终止状态,也会导致动画终极状态和状态变量的取值差别。
FinishCallbackType11+
卡片本领: 从API version 11开始,该接口支持在ArkTS卡片中利用。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中利用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
名称描述REMOVED当整个动画竣事并立即删除时,将触发回调。LOGICALLY当动画在逻辑上处于降落状态,但可能仍处于其长尾状态时,将触发回调。 ExpectedFrameRateRange11+
原子化服务API: 从API version 12开始,该接口支持在原子化服务中利用。
名称类型阐明minnumber盼望的最小帧率。maxnumber盼望的最大帧率。expectednumber盼望的最优帧率。 示例1
阐明:
直接利用animateTo可能导致实例不明确的标题,建议利用getUIContext获取UIContext实例,并利用animateTo调用绑定实例的animateTo。
在组件的onAppear中实举措画。
- // xxx.ets
- @Entry
- @Component
- struct AnimateToExample {
- @State widthSize: number = 250
- @State heightSize: number = 100
- @State rotateAngle: number = 0
- private flag: boolean = true
- build() {
- Column() {
- Button('change size')
- .width(this.widthSize)
- .height(this.heightSize)
- .margin(30)
- .onClick(() => {
- if (this.flag) {
- // 建议使用this.getUIContext()?.animateTo()
- animateTo({
- duration: 2000,
- curve: Curve.EaseOut,
- iterations: 3,
- playMode: PlayMode.Normal,
- onFinish: () => {
- console.info('play end')
- }
- }, () => {
- this.widthSize = 150
- this.heightSize = 60
- })
- } else {
- // 建议使用this.getUIContext()?.animateTo()
- animateTo({}, () => {
- this.widthSize = 250
- this.heightSize = 100
- })
- }
- this.flag = !this.flag
- })
- Button('stop rotating')
- .margin(50)
- .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
- .onAppear(() => {
- // 组件出现时开始做动画
- // 建议使用this.getUIContext()?.animateTo()
- animateTo({
- duration: 1200,
- curve: Curve.Friction,
- delay: 500,
- iterations: -1, // 设置-1表示动画无限循环
- playMode: PlayMode.Alternate,
- expectedFrameRateRange: {
- min: 10,
- max: 120,
- expected: 60,
- }
- }, () => {
- this.rotateAngle = 90
- })
- })
- .onClick(() => {
- // 建议使用this.getUIContext()?.animateTo()
- animateTo({ duration: 0 }, () => {
- // this.rotateAngle之前为90,在duration为0的动画中修改属性,可以停止该属性之前的动画,按新设置的属性显示
- this.rotateAngle = 0
- })
- })
- }.width('100%').margin({ top: 5 })
- }
- }
复制代码
示例2
动画实行完后组件消散。
- // xxx.ets
- @Entry
- @Component
- struct AttrAnimationExample {
- @State heightSize: number = 100;
- @State isShow: boolean= true;
- @State count: number= 0;
- private isToBottom: boolean = true; // 向下
- build() {
- Column() {
- if (this.isShow) {
- Column()
- .width(200)
- .height(this.heightSize)
- .backgroundColor('blue')
- .onClick(() => {
- // 建议使用this.getUIContext()?.animateTo()
- animateTo({
- duration: 2000,
- curve: Curve.EaseOut,
- iterations: 1,
- playMode: PlayMode.Normal,
- onFinish: () => {
- this.count--;
- if (this.count == 0 && !this.isToBottom) { // 组件只有在向下做完动画才会消失
- this.isShow = false;
- }
- }
- }, () => {
- this.count++;
- if (this.isToBottom) {
- this.heightSize = 60;
- } else {
- this.heightSize = 100;
- }
- this.isToBottom = !this.isToBottom;
- })
- })
- }
- }.width('100%').height('100%').margin({ top: 5 })
- .justifyContent(FlexAlign.End)
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |