更多面试题请看这里: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()
✨ 关键区别总结
| 特性 | 视图动画 | 帧动画 | 属性动画 |
|---|---|---|---|
| 作用对象 | 仅View | 仅Drawable | 任意对象 |
| 属性修改 | 仅视觉效果 | 图片切换 | 真实修改属性值 |
| 动画连续性 | 平滑过渡 | 离散帧 | 平滑过渡 |
| 内存消耗 | 低 | 高(需预加载图) | 中等 |
| 复杂度支持 | 简单变换 | 简单序列 | 复杂交互动画 |
| 推荐使用场景 | 兼容旧设备的简单动画 | 小型循环动画 | 现代应用复杂交互 |
实战建议:
- 简单效果(如渐变/平移)用视图动画节省资源
- 复杂交互(如拖拽反馈、曲线运动)必用属性动画
- 帧动画慎用,优先考虑
Lottie实现矢量动画


被折叠的 条评论
为什么被折叠?



