美文网首页
Android 动画机制(二)

Android 动画机制(二)

作者: BlingBest | 来源:发表于2018-12-28 19:33 被阅读34次

    属性动画(Property Animation)


              属性动画是在Android 3.0 中引入的,在补间动画中,我们只能改变View的绘制效果,View的真实属性是没有变化,而属性动画则可以直接改变View对象的属性值,同时属性动画几乎可以对任何对象执行动画,而不是局限在View对象上,从某种意义上讲,属性动画可以说是增强版的补间动画。

             属性动画的基类是Animator ,它是一个抽象类,所以不会直接使用这个类,通常都是继承它并重写其中的相关方法,Android SDK为开发者默认提供了几个子类,大多数情况下使用这些子类就足够完成开发任务了。

    Evaluator

              它是用来控制属性动画如何计算属性值的,它的接口定义是TypeEvaluator,其中定义了evaluate方法,供不同类型的子类实现

             常见的实现类有IntEvaluator,FloatEvaluator,ArgbEvaluator等,下面我们来看一下ArgbEvaluator的具体实现:

    AnimatorSet

             AnimatorSet也是Animator的子类,用来组合多个Animator,并指定这些Animator是顺序播放还是同时播放。

    ValueAnimator

               ValueAnimator是属性动画最重要的一个类,继承自Animator,它定义了属性动画大部分的核心功能,也包括计算各个帧的属性值,处理更新事件,按照属性值的类型控制计算规则等。

             一个完整的属性动画由一下两部分组成:

    1 计算动画各个帧的相关属性值

    2 将这些属性值设置给指定的对象

               ValueAnimator 为开发者实现了第一部分的功能,第二部分功能由开发者自行设置。ValueAnimator 的构造函数是空实现,一般都是使用如下的静态工厂方法进行实例化

    获取到实例后,接着需要设置动画持续时间,插值方式,重复次数等属性值,然后启动动画,最后还需要为ValueAnimator 注册AinmatorUpdateListener 监听器,并在这个监听器的onAnimationUpdate 方法中将计算出来的属性值设置给指定对象。

    ObjectAnimator

             ObjectAnimator是ValueAnimator的子类,封装实现了上面所说的第二部分的功能,因此,在实际开发中用得最多的就是ObjectAnimator,只有在ObjectAnimator实现不了的场景下,才考虑使用ValueAnimator。ObjectAnimator和ValueAnimator在构造实例时最大的不同是需要指定动画作用的具体对象和对象的属性名,而且一般不需要注册AnimatorUpdateLi速腾二监听器。

    使用ObjectAnimator有以下几点需要注意

    1 需要为对象对应的属性提供setter方法,例如,上面的progress属性在父类CircularProgressBae提供了如下方法:

    2 如果动画的对象是View,那么为了能显示动画效果,在某些情况下,可能还需要注册AnimatorUpdateListener监听器,并在其回调方法onAnimationUpdate中调用View的invalidate方法来刷新View的显示

    与补间动画类似,属性动画也可以在 XML文件中定义,在工程的res/animator目录中存放的就是属性动画XML文件,例如scale.xml

    相关文章

      网友评论

          本文标题:Android 动画机制(二)

          本文链接:https://www.haomeiwen.com/subject/dclslqtx.html