介绍
原理:不断更新View的属性,让它表现出动画效果,这就是所谓的属性动画
包含两种
1、ViewPropertyAnimator
2、ObjectAnimator
使用
共有:
设置时长
设置速度模型:Interpolater,内插器(插值器),根据时间完成度去计算动画完成度。默认AccelerateDecelerateInterpolator(先加速,后减速)
设置监听器
ViewPropertyAnimator使用方法
使用方式:View.animate()+相关系列方法
imageView.animate().translationX(500);//向右移动500像素。默认时长300ms,在View中会有对应的setTranslationX()
同样有setTranslationX()/setTranslationY()/setScaleX()/等等
ObjectAnimator使用方法
可自定义属性,需要主动调用start
使用方式:
1、给自定义View添加setter/getter方法(属性更新后需要注意自动重绘问题)
2、ObjectAnimator.ofxxx()
3、ObjectAnimator.start();
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"translateX",500);
objectAnimator.start();
ObjectAnimator.ofxxx创建ObjectAnimator对象。
参数:目标对象,属性名,目标值(起始值-目标值,或者起始值--中间值-目标值)。
属性名:可随便写,但是要保证目标对象里有setXXX的方法。比如translateX,保证目标对象里面有setTranslateX()方法。因为最终是调用View.setTranslateX()更新属性
估值器:TypeEvaluator,根据动画完成度计算出具体属性值
api有的:ArgbEvaluator,IntEvaluator等
自定义TypeEvaluator
1、实现TypeEvaluator接口
2、重写evaludate方法,实现自定义计算属性值
3、animator.setEvaluator();
额外
PropertyValuesHolder:同一动画中改变不同属性值。进阶:PropertyValuesHolder.ofKeyframe()把一个属性拆分成多段,执行更加精细的属性动画
ObjectAnimator.ofPropertyValuesHolder
AnimatorSet:多个动画配合执行
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether();
animatorSet.playSequentially();
animatorSet.play(animator1).with(animator2);
animatorSet.play(animator1).before(animator2);
animatorSet.play(animator1).after(animator2);
animatorSet.start();