帧动画、补间动画与属性动画

帧动画、补间动画与属性动画

一、 帧动画
(一)逐帧动画的定义
逐帧动画是最容易理解、最简单的动画。其需要把动画过程的每一帧静态图片放置在资源文件夹res/drawbale下,然后由Android来控制依次显示这些静态图片,利用人眼“视觉暂留”的原理,从而产生“动画”的错觉。实现方式与电影、动漫的原理一样
(二)逐帧动画的实现

  1. 动画资源文件
    frame_animation.xml放在文件夹res/drawable/下,该逐帧动画包含3张图片a.png、b.png、c.png。
    在这里插入图片描述
  2. 代码实现
    在这里插入图片描述
    参数说明:
     android:onshot,其值为true则动画只播放一遍,false则循环播放。
     android:duration,代表该帧时长,单位为ms。
    在这里插入图片描述

二、补间动画
(一)补间动画定义
补间动画是一种只需指定动画开始帧、结束帧,而对于动画中间的过程,都是系统计算来填充的,无需定义中间的每一帧的动画。
补间动画包括4种类型:Alpha(透明度动画)、Scale(缩放动画)、Translate(位移动画)以及RotateAnaimation(旋转动画)。
在这里插入图片描述
(二)补间动画的实现

  1. 动画资源文件
    twen_animation.xml放在文件夹res/anim/下,该动画实现了位移动画变化。
    一个资源文件中可以是一种动画或者几种动画的组合,多种动画的组合是并行播放的
    在这里插入图片描述
  2. 代码实现
    在这里插入图片描述

三、属性动画
从补间动画的机制来看,补间动画还算比较健全,可以实现view的移动、缩放、旋转以及淡入淡出的操作。
但是一旦操作这四个操作,补间动画就无能为力了,而且补间动画一个最大的缺陷:只是改变View的显示效果,并不会真正的改变View的属性。具体来说:例如屏幕左上角有一个Button,使用补间动画将其移动到右下角,此刻点击右下角的Button,其绝对不会响应点击事件,而在左上角原位置则会响应。
在这里插入图片描述
(一)属性动画定义
属性动画是补间动画的增强版,但更加灵活,可直接修改任何属性,使之形成的动画,功能非常强大,也是最常用的动画。
属性动画自定义如下属性:
 动画时间(Duration):指定动画总共完成所需的时间,默认为300ms。
 时间插值器(Time Interpolation):一个基于当前动画已消耗时间的函数,用来计算属性的值
 重复次数(Repeat count):指定动画是否重复执行,重复执行的次数,也可以指定动画向反方向回退操作。
 动画集(Animator Set):将一系列动画放进一个Set,可以设置同时执行或按序执行
 延迟刷新时间(Frame refresh delay):指定动画刷新的频率,默认为每10ms刷新一帧,但应用程序的帧刷新频率最终取决于整个系统的忙闲程序与系统的时钟频率。
(二)属性动画的实现

  1. ValueAnimator
    ValueAnimator的基础使用方法如下:
    在这里插入图片描述
    上述代码实现的功能是在1000ms内,View从透明到不透明的变换过程,其中AnimatorUpdateListener用于获取动画每一帧的返回值,设置每一帧的动画;AnimatorListenerAdapter用于指定动画结束事件发生时的处理方法(还可以指定动画开始、取消、重复等事件发生时的处理方法)。
    在这里插入图片描述
  2. ObjectAnimator
    对象动画——ObjectAnimator,继承ValueAnimator,允许指定target object,并且target object需要有setter方法,例如:ImageView的setRotation方法。
    在这里插入图片描述
    上述三个属性动画会并行执行,原因在于属性动画是异步动画,即属性动画在调用start()方法之后是一个异步的过程,因此会同时执行三个动画。
    Google为异步动画提供了更好的实现异步动画的方法:PropertyValuesHolder。例子如下:
    在这里插入图片描述
    在这里插入图片描述
    PropertyValuesHolder的优点:Google在其中对动画做了一些优化,这些优化使得在使用多个属性动画时,更加有效率,节省系统资源
  3. AnimatorSet
    AnimatorSet——动画集合,用于组合一系列动画,使用AnimatorSet可以实现动画的串行和并行执行
    在这里插入图片描述
  4. 插值器:Interpolators
    时间插值器定义了一个时间的映射关系,实现动画在执行时间内的加速、减速等。
    所有插值器都实现了TimeInterpolator接口,自定义插值器是可以通过实现TimeInterpolator接口。
    插值器的使用如下:
    在这里插入图片描述
    插值器有如下几个:
    在这里插入图片描述
    在这里插入图片描述
  5. 估值器——Evaluators
    Evaluators用于计算属性动画的给定属性的取指,与属性的起始值、结束值、fraction三个值有关。
    默认情况下,默认的Evaluators将对起始值和结束值的间隔,依照时间进行等分,(在不设定Interpolator的情况下)从起始值均匀的增加(减低)到结束值。
    例如如下的动画中,默认的Evaluators将依照100ms对间隔1.0f进行等分,因此该动画每1ms增加的透明度为1/100f。
    在这里插入图片描述
    Evaluators(估值器)有如下几个:
    在这里插入图片描述
    在这里插入图片描述
    所有的估值器(Evaluator)都实现了TypeEvaluator接口,通过实现该接口可以自定义估值器,接口如下:
    在这里插入图片描述
    参数描述:其中fraction为比例因子(0.0~1.0),用于计算转化后的值
    自定义Evaluator的例子如下:
    在这里插入图片描述
    实现了TypeEvaluator接口的估值器:
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/88028685