鸿蒙开发中动画的详细使用

本文同步发表于我的微信公众号,扫一扫文章底部二维码或微信搜索 程语新视界 即可关注,每个工作日都有文章更新。

在鸿蒙(HarmonyOS)开发中,动画是实现交互体验的重要部分,ArkTS提供了多种动画实现方式。以下是结合显式动画、属性动画及实际案例的详细说明:

一、显式动画(animateTo)

说明 显式动画通过全局接口 animateTo 实现,可在闭包函数中触发状态变化,系统自动生成过渡动画。适用于布局变化、组件联动等场景。 核心特性

  • 支持布局类属性(如宽高、位置)的过渡效果;
  • 内容默认直接跳转到终点状态,需通过 renderFit 属性实现内容跟随动画 。

示例代码

// AnimationWidgets.ets 示例(修改状态触发动画)
export struct AnimationWidgets {
  //通过 @State 变量控制平移量,确保动画与数据绑定联动
  @State mainFlag: boolean = false;

  build() {
    Column() {
      Button("点击触发动画")
        .onClick(() => {
          animateTo({
            duration: 1000,
            curve: Curve.EaseInOut // 缓动曲线:先加速后减速
          }, () => {
            this.mainFlag = !this.mainFlag; // 状态变化触发动画
          })
        })
      // 受状态影响的组件
      Text("动态文本")
        .width(this.mainFlag ? 200 : 100)  // 宽度过渡动画
        .opacity(this.mainFlag ? 0.5 : 1)  // 透明度过渡动画
    }
  }
}

二、属性动画

说明 属性动画针对组件通用属性(如 widthopacityrotate 等)的渐变效果,无需显式调用动画接口。 支持属性

  • 布局类:widthheightbackgroundColor
  • 视觉类:opacityscalerotatetranslate 。

示例代码

// 按钮点击后旋转并放大
@Entry
@Component
struct IconAnimation {
  @State rotateAngle: number = 0;
  @State scaleValue: number = 1;

  build() {
    Column() {
      Button("旋转放大")
        .onClick(() => {
          this.rotateAngle += 90;
          this.scaleValue = 1.5;
        })
        //通过 @State 变量控制平移量,确保动画与数据绑定联动
        .rotate({ angle: this.rotateAngle }) // 旋转动画
        .scale({ x: this.scaleValue, y: this.scaleValue }) // 缩放动画
    }
  }
}

三、组合动画与参数配置

1. 动画参数详解(AnimateParam)

参数类型说明
durationnumber动画时长(ms),默认1000,卡片环境最大1000 
curveCurve | string动画曲线(如 EaseInOutLinear),支持自定义贝塞尔曲线 
delaynumber延迟播放时间,负值表示提前渲染 
iterationsnumber播放次数(-1表示无限循环) 
playModePlayMode播放模式(如 Normal 顺序播放,Alternate 往返播放) 

2. 组合动画示例

// 同时实现移动、旋转、透明度变化的组合动画
animateTo({
  duration: 1500,
  curve: Curve.Spring,// 缓动曲线,更多动画曲线效果可参考 Curve 枚举类型(如 Curve.Spring             
                                  //弹性动画、Curve.Friction 阻尼效果)
  iterations: 2,// 执行2次(往返算1次)
  playMode: PlayMode.Alternate// 往返播放
}, () => {
  this.translateX = 100;// 配合translate属性
  this.rotateAngle = 180;// 配合rotate属性
  this.opacityValue = 0.3;// 配合opacity属性(透明度)
})

四、实际开发建议

  • 避免在频繁触发的回调(如滚动事件)中使用复杂动画;

关注公众号,每天都有优质技术文章推送。

微信扫一扫下方二维码即可关注:

鸿蒙开发中,属性动画(Attribute Animation)是一种常见的界面动态效果,它允许你在一定时间内平滑地改变视图的属性值,比如颜色、尺寸、透明度等。以下是使用属性动画的基本步骤: 1. 创建动画对象:首先,你需要创建一个`PropertyAnimation`对象,指定需要动画化的属性名和目标值。 ```java ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f); ``` 这里`view`是你想要动画的对象,`"alpha"`是你要修改的属性(这里是透明度),初始值0f代表完全透明,结束值1f代表完全可见。 2. 设置动画属性:可以进一步设置动画持续时间、速度曲线(EaseInOut等)、是否重复等。 ```java animator.setDuration(500); // 动画持续时间,单位毫秒 animator.setInterpolator(new AccelerateDecelerateInterpolator()); // 设置速度曲线 animator.setRepeatCount(Animation.INFINITE); // 无限循环 ``` 3. 执行动画:最后调用`start()`方法开始动画。 ```java animator.start(); ``` 4. 监听完成:如果需要在动画结束后做其他操作,可以添加动画监听器。 ```java animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) {} @Override public void onAnimationEnd(Animator animation) { // 动画结束后的回调 } @Override public void onAnimationCancel(Animator animation) {} @Override public void onAnimationRepeat(Animator animation) {} }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值