安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较

安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较

    • ObjectAnimator 的周期性调用方式与父类 ValueAnimator 一样
    • ObjectAnimator 中对函数 animateValue::float:的实现
    • 下面记录一下你设置的动画值的范围如何传给函数android.util.Property.set::T,V:

这篇文章分析 ObjectAnimator 动画是如何动起来的,关于它的父类 ValueAnimator 请看 安卓底朝天 —— android.animation.ValueAnimator.start:: 的调用栈

ObjectAnimator 使用了 ValueAnimator 周期性调用绘制函数的方式(Choregrapher),但由于 ObjectAnimator 要实现的是在动画更新时设置对象(一般是View)的属性,因此它与 ValueAnimator 不同的是动画的更新点。

ObjectAnimator 的周期性调用方式与父类 ValueAnimator 一样

安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较_第1张图片
从这个调用栈可以看出,ObjectAnimator.start::: 调用了 ValueAnimator.start:::,因此会触发函数 android.animation.AnimationHandler.AnimationFrameCallbackProvider.postFrameCallback::Choreographer.FrameCallback: 的递归调用。

我们回顾一下 ValueAnimator.start::: 的调用栈:
android.animation.ValueAnimator.start:::
android.animation.ValueAnimator.start::boolean:
android.animation.AnimationHandler.addAnimationFrameCallback::AnimationFrameCallback,long:
android.animation.AnimationHandler.AnimationFrameCallbackProvider.postFrameCallback::Choreographer.FrameCallback:(这个函数会在下面再次被调用,形成递归)

。。。。。。。。。。。。。。。。。。。。。。。多态。。。。。。。。。。。。。。。。。。。。。。。。

android.animation.AnimationHandler.MyFrameCallbackProvider.postFrameCallback::Choreographer.FrameCallback:
android.view.Choreographer.postFrameCallback::FrameCallback:

。。。。。。。。。。。。。。。。。vertical sync pulse(屏幕刷新时) 。。。。。。。。。。。。。。。。。

android.view.Choreographer.FrameCallback.doFrame::long:

。。。。。。。。。。。。。。。。。。。。。。。多态。。。。。。。。。。。。。。。。。。。。。。。。

android.view.Choreographer.FrameCallback(android.animation.AnimationHandler.mFrameCallback).doFrame::long:(匿名类中的函数)
|—————————下面这个函数在上面出现过—————————|
android.animation.AnimationHandler.AnimationFrameCallbackProvider.postFrameCallback::Choreographer.FrameCallback:(递归了!)
|——————————————————————————————|
android.animation.ValueAnimator.doAnimationFrame::long:
android.animation.ValueAnimator.animateBasedOnTime::long:
android.animation.ValueAnimator.animateValue::float:
android.animation.ValueAnimator.AnimatorUpdateListener.onAnimationUpdate::ValueAnimator:

注意最后两个函数是 ValueAnimator 动画的更新点,而我们前面也说过 ObjectAnimator 动画的更新方式不同于 ValueAnimator,因此我们要看:

ObjectAnimator 中对函数 animateValue::float:的实现

安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较_第2张图片
函数 ObjectAnimator.animateValue::float: 调用了父类函数 ValueAnimator.animateValue::float:,但更重要的是它自己对这个函数的实现:调用了 android.util.Property.set::T,V:,关于这个函数请看:安卓百宝箱:android.util.*

下面就不总结调用栈了,因为和它的父类差不多,除了函数 animateValue::float: 的实现。

下面记录一下你设置的动画值的范围如何传给函数android.util.Property.set::T,V:

安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较_第3张图片
函数 android.animation.Keyframes.FloatKeyframes.getFloatValue::float: 的子类实现为 android.animation.FloatKeyframeSet.getFloatValue::float:
安卓底朝天 —— android.animation.ObjectAnimator 与父类 ValueAnimator 的比较_第4张图片

你可能感兴趣的:(工具使用,——,函数外篇(安卓底朝天),android,安卓,java,animation)