属性动画源码

实现方法:利用属性动画,scaleX和scaleY,alpha,INTERPOLATOR来实现的动画效果。
补间动画的缺陷:
补间动画只能够实现旋转,平移,淡入淡出,缩放出这四种动画操作。属性动画可以针对任何属性进行操作。
补间动画只可以对UI组件进行动画操作,而属性动画可以针对任何对象进行操作。
补间动画还有一个致命的缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属性。
Android 3.0版本开始:属性动画,只需要指定执行哪种动画,动画的持续时间,动画的初始值和结束值。
ObjectAnimator内部的工作机制并不是直接对我们传入的属性名进行操作的,而是会去寻找这个属性名对应的get和set方法。
ValueAnimator:是ObjectAnimator的父类
ObjectAnimator:
AnimatorSet:组合动画
使用XML编写动画
设计属性动画的思路:拿到设置的动画的起始值,结束值,动画时间等参数后,开启一个定时器,去执行一个任务,在任务中根据插值器计算fraction,交给Evaluator,得到属性当前应该设置的值,然后根据反射设置动画目标的指定属性。
属性动画原理:拿到设置的动画的起始值,结束值,动画时间等参数后,开启一个定时器,去执行一个任务,在任务中根据插值器计算fraction,交给Evaluator,得到属性当前应该设置的值,然后根据反射设置动画目标的指定属性。
插值器:
AccelerateInterpolator:fraction指数增长,
LinearInterpolator:fraction线性增长。
TypeEvaluator:告诉动画系统如何从初始值过度到结束值,evaluate()方法。evaluate()方法当中传入了三个参数,第一个参数fraction非常重要,这个参数用于表示动画的完成度的,fraction是用插值器计算出来的,我们应该根据它来计算当前动画的值应该是多少,第二第三个参数分别表示动画的初始值和结束值,用结束值减去初始值,算出它们之间的差值,然后乘以fraction这个系数,再加上初始值,那么就得到当前动画的值了。
Interpolator: fraction,其实是插值器算出来的。比如线性插值器:fraction 值就是(currentTime - mStartTime) / mDuration,动画的运行时间/总设置时间。
反射调用:
源码解释:
ofInt:
(1)ofInt中实例化了一个ObjectAnimator对象,然后设置了target,PropertyName,values(PropertyValuesHolder)

(2)然后分别在setInterpolator,setDuration设置了Interpolator和duration。

(3)其中setEvaluator是给PropertyValuesHolder,以及keyframeSet设置估值算法。

(4)PropertyValueHolder实际上是IntPropertyValueHolder类型对象,包含PropertyName,valueType,keyframeSet .

start:

更新动画各种状态,然后初步计算fraction为(currentTime - mStartTime) / mDuration;然后将这个fraction交给我们的插值器计算后得到新的fraction,再将新的fraction交给我们的Evaluator,Evaluator根据开始、结束、fraction得到当前属性(动画作用的属性)应该的值,最后调用反射进行设置;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 2,755评论 0 10
  • 主目录见:Android高级进阶知识(这是总目录索引) 昨天已经简单讲了下使用,今天又是源码分析环节,之前看别人分...
    ZJ_Rocky阅读 1,990评论 3 6
  • Animation Animation类是所有动画(scale、alpha、translate、rotate)的基...
    四月一号阅读 1,936评论 0 10
  • 冬天到了, 你还是没来。 就像当年的秋, 随着你走开。 你说做我一生的城池, 然后夹杂着细软逃离。 这手无寸铁的黎...
    江思齐阅读 539评论 0 2
  • 我来这宿雨的草原 满怀期待 手指伸入土地 能摁出湿润的歌来 你在梦里生长,有时也长出梦外 呼吸,从来不费力 就已让...
    NJ青木阅读 199评论 4 5