Android动画有哪几种?它们的特点和区别是什么?

更多面试题请看这里:https://interview.raoyunsoft.com/
面试题专栏会持续更新欢迎关注订阅

Android动画主要分为三种类型,每种都有独特的实现方式和适用场景:

1. 视图动画(View Animation)
  • 特点
    • 作用于整个View对象,通过改变视图的位置、大小、旋转和透明度实现动画效果
    • 资源消耗低,兼容性好(支持Android 1.0+)
    • 只能修改视图的绘制位置,不会改变视图的实际布局属性
  • 类型
    • 平移动画<translate>):视图位置移动
    • 缩放动画<scale>):视图尺寸变化
    • 旋转动画<rotate>):围绕中心点旋转
    • 透明度动画<alpha>):渐变显示/隐藏
  • 代码示例
    <!-- res/anim/slide_in.xml -->
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:fromYDelta="100%"
            android:toYDelta="0"
            android:duration="300"/>
        <alpha
            android:fromAlpha="0.0"
            android:toAlpha="1.0"
            android:duration="300"/>
    </set>
    
2. 帧动画(Frame Animation)
  • 特点
    • 通过逐帧播放图片序列实现动画(类似GIF)
    • 适合小型循环动画(如加载图标、简单特效)
    • 内存消耗高,大尺寸图片序列易导致OOM
  • 实现方式
    <!-- res/drawable/loading_anim.xml -->
    <animation-list android:oneshot="false">
        <item android:drawable="@drawable/frame1" android:duration="100"/>
        <item android:drawable="@drawable/frame2" android:duration="100"/>
        <item android:drawable="@drawable/frame3" android:duration="100"/>
    </animation-list>
    
3. 属性动画(Property Animation)
  • 特点(Android 3.0+引入):
    • 通过动态修改对象属性值实现动画(不限于View)
    • 真正改变目标属性值(如视图坐标、宽度等)
    • 支持自定义插值器和估值器,实现复杂动画曲线
    • 功能最强大,推荐在新项目中使用
  • 核心组件
    • ValueAnimator:数值变化引擎
    • ObjectAnimator:直接操作对象属性
    • AnimatorSet:组合多个动画
  • 代码示例
    // 同时改变透明度和平移位置
    val animatorSet = AnimatorSet().apply {
        playTogether(
            ObjectAnimator.ofFloat(view, "alpha", 0f, 1f),
            ObjectAnimator.ofFloat(view, "translationY", 100f, 0f)
        )
        duration = 500
        interpolator = OvershootInterpolator()
    }
    animatorSet.start()
    

✨ 关键区别总结

特性视图动画帧动画属性动画
作用对象ViewDrawable任意对象
属性修改仅视觉效果图片切换真实修改属性值
动画连续性平滑过渡离散帧平滑过渡
内存消耗(需预加载图)中等
复杂度支持简单变换简单序列复杂交互动画
推荐使用场景兼容旧设备的简单动画小型循环动画现代应用复杂交互

实战建议

  • 简单效果(如渐变/平移)用视图动画节省资源
  • 复杂交互(如拖拽反馈、曲线运动)必用属性动画
  • 帧动画慎用,优先考虑Lottie实现矢量动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值