0 前言
参考资料[2]分析了自动旋转屏幕的实现,本文重点分析旋转过程的动画实现。
验证环境:NanoPC-T4开发板、Nexus 6P手机
1 代码流程
旋转动画的发起详见参考资料[2]第2.3小节步骤(1),具体旋转过程详见:
FrameDisplayEventReceiver.onVsync()
|-->Message.obtain(mHandler, this) // 是否为MSG_DO_FRAME
|-->mHandler.sendMessageAtTime(msg, timestampNanos / TimeUtils.NANOS_PER_MS)
|-->FrameHandler.handleMessage() // case MSG_DO_FRAME,暂且当作上述信息是MSG_DO_FRAME
|-->Choreographer.doFrame(System.nanoTime(), 0)
|-->Choreographer.doCallbacks(int callbackType, long frameTimeNanos)
|-->CallbackRecord.run(long frameTimeNanos)
|-->((FrameCallback)action).doFrame(frameTimeNanos)
|<----------------------|
|-->WindowAnimator.mAnimationFr