Property Animation

属性动画特点:默认动画时长300毫秒,动画间隔10毫秒修改动画的属性

属性动画类:ViewPropertyAnimator,ObjectAnimator、ValueAnimator 

通用功能:动画设置、Interpolator速度模型 、监听器


ViewPropertyAnimator

简介:可连缀使用的属性动画类,但只能使用提供的支持方法

使用方式:View.animate() + 相关系列方法

                  View.animate().setAlpha(20).setScale(20).setDuration(500).setInterpolator(xxx)

支持方法

translationX(100) 表示用动画把 View 的 translationX 值渐变为 100

translationXBy(100) 则表示用动画把 View 的 translationX 值渐变地增加 100


ObjectAnimator

简介:除了支持的属性可用,还可定制属性来使用

使用方式:1.如果是自定义属性控件,需要添加 setter / getter 方法

                  2.用 ObjectAnimator.ofXXX() 创建 ObjectAnimator 对象

                  3.用 start() 方法执行动画

参数:目标对象 :执行动画的主体

           属性名    :根据属性名会去调用对应的setXXX方法(所以定制属性名叫什么无所谓,set方法要对应上)

           目标值    :填一个:目标值(目标值只有一个必须写get方法,get方法中属性的当前值会被当做起始值)

                             填两个:起始值/目标值

                             填多个:起始/转接点.../目标值

java代码使用

动画通过xml方式:具备重用性,即将通用的动画写到XML里,可在各个界面中去重用它

xml使用

PropertyValuesHolder:同一个动画中改变多个属性(共享动画的开始时间、结束时间、Interpolator 等)

同一动画改变多个属性

AnimatorSet:多个动画配合执行(都有独立的设置)

多个动画组合

PropertyValuesHolders.ofKeyframe() :把同一个属性拆分成多段,执行更加精细的属性动画

同一动画属性拆分

TypeEvaluator:求值器,根据动画完成度求出对应的实际的属性值

ObjectAnimator中 ofInt:默认IntEvaluator,也可设置其他定义的TypeEvaluator

                          ofFloat:默认FloatEvaluator,也可设置其他定义的TypeEvaluator

                        ofObject:未支持的属性类型,需自定义TypeEvaluator

对同样的属性有不同的解析方式:比如对颜色ofInt可以使用ArgbEvaluator,也可以自定义Int型HsvEvaluator

对未支持属性可自定义解析方式:比如自定义Point类型的PointEvaluator

Android中提供了:IntEvaluator、FloatEvaluator、ArgbEvaluator、PointFEvaluator(API21)等

ArgbEvaluator:颜色使用了Argb(ffff0000)颜色规则,值的变化不能简单的从整体变化大小(比如红变绿r在减小,g在变大)

使用

注:由于ARGB是计算机的表达方式,计算机只有红绿蓝,根据动画完成度对颜色进行百分比变化,对人是不直观的

        可以使用TypeEvaluator自定义HSV,HSL色彩空间的计算规则来更符合人眼的感官

色彩空间

自定义 Evaluator:

fraction:动画的完成度,用于计算动画的值:动画的值 = 初始值 + 完成度 * (结束值 - 初始值);

ofInt
ofObject

ValueAnimator 

简介:ObjectAnimator 的父类,ViewPropertyAnimator 和 ObjectAnimator 的内部实现其实都是 ValueAnimator

特点:最基本的轮子,功能最少、最不方便,但有时也是束缚最少、最灵活的

         (比如使用一些第三方库的控件,想要做动画的属性却没有 setter / getter 方法的时候,会需要用到它)

ValueAnimator使用渐变的方式来改变一个独立的数据,不属于具体对象,更新后做什么都需要自己来做    

eg:在更新中将View的属性改变,并且需要调用刷新UI

使用

动画设置

setDuration:设置动画时长

setStartDelay:设置延迟播放时间

setRepeatCount:设置动画重复播放次数 = 重放次数+1,若infinite,动画无限循环

setRepeatMode:设置动画重复播放模式 (restart:正序重放,reverse:倒序回放)





Interpolator

简介:内插器/插值器,动画速度模型

内插:数学中对一段离散的数据点上面的每一个值求对应的另一个值

           android中根据 时间完成度 去求对应的 动画完成度

AccelerateDecelerateInterpolator

简介:先加速再减速,默认的 Interpolator

效果:最符合物理世界的模型,看起来就像是物体从速度为 0 开始逐渐加速,然后再逐渐减速直到 0 的运动

LinearInterpolator

简介:匀速

匀速

AccelerateInterpolator

简介:持续加速(加速骤停)

效果:在整个动画过程中,一直在加速,直到动画结束的一瞬间,直接停止

          (可用在离场效果中,加速离场,出了界面骤停用户也看不见了)

持续加速

DecelerateInterpolator

简介:持续减速直到 0

效果:动画开始的时候是最高速度,然后在动画过程中逐渐减速,直到动画结束的时候恰好减速到 0

         (可用在离场效果中,从界面的外部飞入界面后停在某处)

持续减速直到 0

AnticipateInterpolator

简介:先回拉一下再进行正常动画轨迹(类似投掷物体或跳跃等动作前的蓄力)

效果:若平移就像是反向平移了点再正向,放大就像是先缩小一下再放大

回拉

OvershootInterpolator

简介:动画会超过目标值一些,然后再弹回来(类似一下坐沙发上陷下去又回上来点)

效果:若平移就像过头了又回来点

回弹

AnticipateOvershootInterpolator

简介:AnticipateInterpolator和OvershootInterpolator结合效果

效果:开始前回拉,最后超过一些然后回弹

BounceInterpolator

简介:在目标值处弹跳(类似篮球落地效果)

效果:若平移就像到了目标处再往复运动了下

目标弹跳

CycleInterpolator

简介:动画循环一定次数,速率改变沿着正弦曲线

效果:参数0.5f动画回弹一次,参数2.0f动画回弹2次(通过参数可自定义正弦曲线周期)

动画循环

PathInterpolator

简介:自定义动画完成度 / 时间完成度曲线(使用Path绘制)

效果:可定制出任何速度模型

自定义速度模型

5.0新增FastOutLinearInInterpolator、FastOutSlowInInterpolator、LinearOutSlowInInterpolator

FastOutSlowInInterpolator

简介:加速运动

效果:相对于AccelerateInterpolator初始阶段加速度稍快点,没太大区别

红色部分

FastOutSlowInInterpolator

简介:先加速再减速

效果:相对于AccelerateDecelerateInterpolator前期加速度要快得多,后期减速也是

红色部分

LinearOutSlowInInterpolator

简介:持续减速

效果:相对于DecelerateInterpolator初始速度更高一点,也没太大区别

红色部分

设置监听器

ViewPropertyAnimator

    设置:setListener()、setUpdateListener()    仅可设置一个

    移除:setListener(null)、setUpdateListener(null)              

    独有:设置一次性的动画开始或结束的监听withStartAction()、withEndAction()                         

ObjectAnimator

    设置:addListener()、addUpdateListener()  可设置多个

    移除:removeListener()、removeUpdateListener()

    独有:支持暂停addPauseListener()、removePauseListener()

AnimatorListener 

简介:setListener、addListener参数类型都是AnimatorListener,本质上其实都是一样的

onAnimationStart(Animator animation):当动画开始执行时,这个方法被调用

onAnimationEnd(Animator animation):当动画结束时,这个方法被调用

onAnimationCancel(Animator animation):当动画被通过 cancel() 方法取消时,这个方法被调用

                                                                    (就算动画被取消onAnimationEnd也会在调用)

onAnimationRepeat(Animator animation):当动画通过 setRepeatMode() / setRepeatCount() 或 repeat() 方法重复执行时,这个方法被调用

                                                                     (ViewPropertyAnimator不支持重复)

AnimatorUpdateListener

简介:setUpdateListener、addUpdateListener参数类型都是AnimatorUpdateListener

onAnimationUpdate(ValueAnimator animation):当动画的属性更新时(不严谨的说,即每过 10 毫秒,动画的完成度更新时),这个方法被调用

ObjectAnimator.addPauseListener

ViewPropertyAnimator.withStartAction/EndAction()

简介: 一次性的,动画重用也不会再被调用

         (withEndAction只有动画正常结束才会被调用,动画被取消时不会被执行,区别于AnimatorListener.onAnimationEnd)

你可能感兴趣的:(Property Animation)