Android Animation Summary
yunshuipiao opened this issue · 0 comments
Android Animation Summary
[TOC]
动画作为 Android 中提升用户体验的一部分,也是非常重要的模块。这篇文章总结 Android 中与动画使用相关的部分。
概述
Android 中的动画分为三大类
- View 动画(补间动画和帧动画)
- Transition 过渡动画
- 属性动画
动画的本质是将作用对象的属性值在一段时间内进行缓慢改变,将每一个小的时间片对应的属性值进行修改并不断重绘制,形成动画
View 动画
主要分为四种,
名称 | 标签 | 子类 | 效果 |
---|---|---|---|
平移动画 | TranslateAnimation | 移动 | |
缩放动画 | ScaleAnimation | 缩放 | |
旋转动画 | RotateAnimation | 旋转 | |
透明度 | AlphaAnimation | 透明度 |
另外还有一种帧动画也归于 View 动画。
View 动画可以使用 xml 描述,也可以使用代码描述。
帧动画就是顺序播放一组预先定义好的图片, 系统提供了AnimationDrawable
来使用帧动画。
Transition(过渡动画)
用于控制 ViewGroup 的 Item的出场效果,和 Activity 的专场效果。
进入和退出 Activity 时的动画:
Intent intent = new Intent(this, AnimActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
}
属性动画
核心原理
ObjectAnimator, 继承自 ValueAnimator,使用这个类可以对任意对象的任意属性进行动画操作。而ValueAnimator是整个属性动画机制当中最核心的一个类。
属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。
TypeEvaluator 决定了动画如何从初始值过渡到结束值。
TimeInterpolator 决定了动画从初始值过渡到结束值的节奏。
View 动画和属性动画对比
-
属性动画才是真正的实现了view的移动,View 动画的移动更像是在不同地方绘制了一个影子,实际的对象还是处于原来的地方。
-
当我们把动画的repeatCount设置为无限循环时,如果在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没有问题。因此,使用属性动画时切记在Activity执行 onStop 方法时顺便将动画停止。
-
使用帧动画时需要注意,不要使用过多特别大的图,容易导致内存不足。