Android动画之Animation和Animator
Android 动画分为Animation和Animatior两大类。其中:
Animation包括:逐祯动画,补间动画
Animator包括:属性动画
区别:Animation动画的作用对象只能是View,而Animator动画的作用对象可以是任何对象(这其中当然也包括View)
下面详细说说各种动画:
Animation:
1.逐祯动画(AnimationDrawble)
支持java和xml两种实现方式。
其中xml实现是在res/drawable目录下新建xml文件即可。支持标签可以参考AnimationDrawble类的注释:
An AnimationDrawable defined in XML consists of a singl{@code } element and a series of nested {@code } tags. Each item defines a frame of the animation.
2.补间动画
补间动画主要包括:AlphaAnimation,TranslateAnimation,RotateAnimation,ScaleAnimation。
支持java和xml两种实现方式。
xml实现是在res/anim/目录下新建xml文件。xml中使用的标签有:
如果是单个动画,对应的根标签分别是alpha,translate,rotate,scale。
如果是多个动画则跟标签是set,set下根据动画类型分别是alpha,translate,rotate,scale标签。
3.动画集
对应的类是AnimationSet
4.动画监听器
对应的类是AnimationListener
Animator:
属性动画一般包括:ValueAnimator,ObjectAnimator。其中ObjectAnimator是ValueAnimator的子类。
1.ValueAnimator
支持java和xml两种实现方式。
java实现可以通过以下方法进行获取ValueAnimator的对象实例:
public static ValueAnimator ofInt(int... values)
public static ValueAnimator ofFloat(float... values)
public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values)
可以通过监听器AnimatorUpdateListener获取当前属性的值。
xml实现是在res/animator/创建xml文件,ValueAnimator对应的xml文件使用的标签是animator。
2.ObjectAnimator
原理:控制值的变化,之后自动赋给对象的属性,从而实现动画。
与ValueAnimator对比:
- 是ValueAnimator的子类
- ValueAnimator只是对值进行平滑的动画过渡;ObjectAnimator直接对任意对象的任意属性进行动画操作,如View的alpha属性
- ValueAnimator需要我们为对象属性手动赋值;ObjectAnimator会为对象属性自动赋值
ObjectAnimator支持java和xml两种实现方式。
xml实现是在res/animator/创建xml文件,ObjectAnimator对应的xml文件使用的标签是objectAnimator。
3.动画集
对应的类是AnimatorSet
同时也可以通过PropertyValuesHolder、ViewPropertyAnimator(作用对象是view)实现多个动画。
4.动画监听器
对应的类是AnimatorListener
备注:除了以上提到的Animation和Animator,SurfaceView也可以实现动画,这里不作介绍。
相关参考文章:
https://www.jianshu.com/p/a480ca619dd9
https://www.2cto.com/kf/201606/514284.html?fopyfc=9ldc03
https://www.jianshu.com/p/609b6d88798d