动画
本篇记录属性动画执行的原理,本来想通过查看动画相关的源码了解动画执行的原理,没想到后面涉及的东西会越来越多
通过阅读动画相关源码你会了解一下知识:
屏幕刷新原理、Choreographer、VSync,我是看完源码后又看了 胡飞洋 Android屏幕刷新机制—VSync、Choreographer 才大概理解的,还涉及到插值器、估值器。
属性动画
首先ObjectAnimator继承自ValueAnimator,而ValueAnimator也是对动画每个时间点上值处理的关键类。
其大概原理就是 通过ofInt、ofFloat、ofArgb等将属性以及对应的值保存到PropertyValuesHolder中,然后PropertyValuesHolder通过反射将属性值注入到target中,等接收到 VSync 信号,刷新屏幕,就会通过注入的属性值改变 target,形成动画。
从ObjectAnimator的start方法进入会走到ValueAnimator的start方法中
private void start(boolean playBackwards) {
if (Looper.myLooper() == null) {
throw new AndroidRuntimeException("Animators may only be run on Looper threads");
} else {
this.mPlayingBackwards = playBackwards;
this.mCurrentIteration = 0;
this.mPlayingState = 0;
this.mStarted = true;
this.mStartedDelay = false;
ValueAnimator.AnimationHandler animationHandler = this.getOrCreateAnimationHandler();
animationHandler.mPendi