总结一下1. 掌握帧动画、补间动画和属性动画的基本概念和使用 2. ObjectAnimator和VauleAnimator的区别 3. 插值器、估值器的作用,以及如何按需自定义 4. 如何将多种动画组合起来 5. 掌握lottie动画的使用方式
时间: 2025-07-21 08:54:41 浏览: 3
<think>我们被要求总结Android动画相关知识,包括帧动画、补间动画、属性动画、ObjectAnimator与ValueAnimator区别、插值器和估值器的作用及自定义方法、动画组合方式以及Lottie动画的使用。
根据引用内容,我们可以将知识分为以下几个部分:
1. 帧动画
2. 补间动画(视图动画)
3. 属性动画(包括ObjectAnimator和ValueAnimator)
4. 插值器和估值器(作用及自定义方法)
5. 动画组合方式
6. Lottie动画的使用方法
下面我们将逐一总结这些内容。</think>### Android动画知识总结
#### 1. 帧动画(Frame Animation)
- **概念**:逐帧播放图片序列实现动画效果
- **使用方式**:
```xml
<!-- res/drawable/anim_frame.xml -->
<animation-list android:oneshot="false">
<item android:drawable="@drawable/frame1" android:duration="100"/>
<item android:drawable="@drawable/frame2" android:duration="100"/>
</animation-list>
```
```java
ImageView image = findViewById(R.id.image);
image.setBackgroundResource(R.drawable.anim_frame);
((AnimationDrawable) image.getBackground()).start();
```
#### 2. 补间动画(Tween Animation)
- **概念**:对视图进行平移/旋转/缩放/透明度变化的视图动画[^4]
- **四种类型**:
- 平移(Translate):`<translate android:toYDelta="400"/>`
- 旋转(Rotate):`<rotate android:toDegrees="90"/>`
- 缩放(Scale):`<scale android:toXScale="2.0"/>`
- 透明度(Alpha):`<alpha android:toAlpha="0.1"/>`
- **局限**:仅改变视图绘制位置,不改变实际属性值[^1]
#### 3. 属性动画(Property Animation)
- **核心优势**:可作用于任何对象的属性(只要有set/get方法)[^1]
- **数学原理**:通过时间插值器$f(t)$和类型估值器$V(f(t))$计算属性值:
$$ \text{属性值} = V(f(t)), \quad t \in [0,1] $$
##### 3.1 ValueAnimator
- **作用**:计算动画过程中的值变化
- **示例**:
```java
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.addUpdateListener(animation -> {
float value = (float) animation.getAnimatedValue();
// 根据value更新属性
});
anim.start();
```
##### 3.2 ObjectAnimator
- **作用**:直接操作对象属性
- **示例**:
```java
ObjectAnimator.ofFloat(view, "alpha", 1f, 0f).start(); // 透明度动画
ObjectAnimator.ofFloat(view, "translationX", 0f, 100f).start(); // 平移动画
```
##### 3.3 区别对比
| **特性** | ValueAnimator | ObjectAnimator |
|-------------------|------------------------|-------------------------|
| 作用对象 | 值变化 | 对象属性 |
| 自动更新UI | 需手动监听更新 | 自动更新 |
| 使用复杂度 | 较高 | 较低 |
| 适用场景 | 自定义属性/复杂动画 | 标准属性动画 |
#### 4. 插值器(Interpolator)与估值器(Evaluator)
- **插值器**:控制动画变化速率(时间函数$f(t)$)
- 系统内置:Linear(匀速)、Accelerate(加速)、Bounce(弹跳)
- 自定义:
```java
public class CustomInterpolator implements Interpolator {
@Override
public float getInterpolation(float input) {
return (float) Math.sin(input * Math.PI / 2); // 正弦曲线
}
}
```
- **估值器**:计算属性中间值$V(f(t))$
- 自定义:
```java
public class RectEvaluator implements TypeEvaluator<Rect> {
@Override
public Rect evaluate(float fraction, Rect start, Rect end) {
int left = start.left + (int)(fraction * (end.left - start.left));
// 计算其他坐标...
return new Rect(left, top, right, bottom);
}
}
```
#### 5. 动画组合方式
- **AnimatorSet**:控制多个动画协同工作
```java
AnimatorSet set = new AnimatorSet();
set.play(anim1).with(anim2).before(anim3); // 定义执行顺序
set.setDuration(1000).start();
```
- **PropertyValuesHolder**:单视图多属性动画
```java
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY).start();
```
#### 6. Lottie动画
- **优势**:解析After Effects导出的JSON动画文件
- **使用流程**:
1. 添加依赖:`implementation "com.airbnb.android:lottie:6.4.0"`
2. 放置JSON文件:`app/src/main/assets/anim.json`
3. XML布局:
```xml
<com.airbnb.lottie.LottieAnimationView
app:lottie_fileName="anim.json"
app:lottie_autoPlay="true"/>
```
4. 动态控制:
```java
LottieAnimationView animView = findViewById(R.id.animation_view);
animView.pauseAnimation(); // 暂停
animView.setProgress(0.5f); // 跳转进度
```
#### 对比总结
| **动画类型** | 作用对象 | 是否改变实际属性 | 复杂度 | 适用场景 |
|--------------|---------------|------------------|--------|------------------------|
| 帧动画 | View | ❌ | ★☆☆ | 小规模序列帧 |
| 补间动画 | View | ❌ | ★★☆ | 简单视图效果 |
| 属性动画 | 任意对象 | ✔️ | ★★★ | 复杂交互/自定义属性 |
| Lottie | 矢量图形 | ✔️ | ★★☆ | 复杂矢量动画/设计师协作 |
> 注:属性动画在Android 3.0+(API 11)引入,弥补了视图动画的缺陷[^1][^2]
阅读全文
相关推荐



















