属性动画特点:默认动画时长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方法中属性的当前值会被当做起始值)
填两个:起始值/目标值
填多个:起始/转接点.../目标值
动画通过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:动画的完成度,用于计算动画的值:动画的值 = 初始值 + 完成度 * (结束值 - 初始值);
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
(可用在离场效果中,从界面的外部飞入界面后停在某处)
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)