Android三种动画学习

Android的动画分为了三种, 分别是 帧动画、View动画(补间动画)、属性动画。

1、帧动画

帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。

帧动画的使用很简单,总共就两个步骤:

1、在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片;
2、使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果

2、View动画(也称补间动画)

2.1 View动画的基本介绍

view动画也称为补间动画,因为我们只需要拿到一个view,设定它开始和结束的位置,中间的view会自动由系统补齐,而不需要帧动画每一幅图都是提前准备好的。

View动画是Android一开始就提供的比较原始的动画,主要支持四种效果:平移、缩放、旋转、透明度变化(渐变) 四种基本效果,我们可以再这四种基础效果的基础上,选择其中的几种进行组合。

View动画的四种基本效果对应了四个Animation的子类,如下:

3、属性动画

属性动画可以看作是增强版的补间动画,与补间动画的不同之处体现在:

补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的变换,但是属性动画可以定义任何属性的变化。
补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。
与补间动画类似的是,属性动画也需要定义几个方面的属性:

动画持续时间。默认为 300ms,可以通过 android:duration 属性指定。
动画插值方式。通过 android:interploator 指定。
动画重复次数。通过 android:repeatCount 指定。
重复行为。通过 android:repeatMode 指定。
动画集。在属性资源文件中通过 <set …/> 来组合。
帧刷新率。指定多长时间播放一帧。默认为 10 ms。
属性动画 API

Animator: 提供创建属性动画的基类,基本不会直接使用这个类。
ValueAnimator:属性动画用到的主要的时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它;
ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。
AnimatorSet:Animator 的子类,用于组合多个 Animator。
除了这些 API,属性动画还提供了一个 Evaluator ,用来控制属性动画如何计算属性值。

IntEvaluator:计算 int 类型属性值的计算器。
FloatEvaluator: 用于计算 float 类型属性值的计算器。
ArgbEvaluator: 用于计算十六进制形式表示的颜色值的计算器。
TypeEvaluator: 可以自定义计算器。
使用 ValueAnimator 创建动画的步骤:

调用 ValueAnimator 的 ofInt()、ofFloat() 或者 ofObject() 静态方法创建 ValueAnimator 实例。
调用 ValueAnimator 的 setXxx() 等方法设置持续时间,插值方式、重复次数等。
调用 ValueAnimator 的 start() 方法启动动画。
为 ValueAnimator 注册 AnimatorUpdateListener 监听器,在该监听器中可以监听 ValueAnimator 计算出来的值改变,并将这些值应用到指定对象上。
属性动画的一般使用:

定义属性动画和补间动画等类似,有两种方式:

使用 ValueAnimator 或者 ObjectAnimator 的静态工厂方法创建动画。
使用资源文件来定义动画。
属性动画的使用:

创建 ValueAnimator 或 ObjectAnimator 对象 —— 即可以从 XML 资源文件加载该动画也可以直接调用 ValueAnimator 或者 ObjectAnimator 的静态工厂方法创建动画。
根据需要为 Animator 对象设置属性。
如果需要监听 Animator 的动画开始事件,动画结束事件、动画重复事件、动画值改变事件,并根据事件提供响应处理代码,需要为Animator 对象设置监听器。
如果有多个动画需要同时播放,需要使用 AnimatorSet 组合这些动画。
调用 Animator 对象的 start 启动动画。