问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android WMS动画系统初探(一)

发布网友 发布时间:2023-05-01 13:51

我来回答

1个回答

热心网友 时间:2023-11-03 04:55

Android WMS动画系统初探(一)

Android WMS动画系统初探(二)

Android WMS动画系统初探(三)

Android中动画的工作过程:在某一个时间点,调用getTransformation(),根据mStartTime和mDuration,计算出当前的进度,在根据mInterpolator计算出转换的进度,然后计算出属性的当前值,保存在matrix中。
再调用Matrix.getValues将属性值取出,运用在动画目标上。

[图片上传失败...(image-8c5ae5-1636101404926)]

Animation
在给定了初始状态、结束状态、启动时间与持续时间后,可以为使用者计算其动画目标在任意时刻的变换(Transformation)

Transformation
描述了一个变换,包含两个分量:透明度和一个二维变换矩阵

无论APP或者系统,都是可以直接向Choreographer注册FrameCallback来实现动画驱动的。

Choreographer 类似 Handler,处理回调的时机为屏幕的垂直同步(VSync)事件到来之时,其处理回调的过程被当作渲染下一帧的工作的一部分

postCallback(int callbackType, Runnable action, Object token)

postCallbackDelayed(int callbackType, Runnable action, Object token, delayMillis)

postFrameCallback(FrameCallback callback)

对于View动画,动画的目标就是View,而对于窗口来说,动画的目标其实都是Surface,对不同层级的SurfaceControl进行操纵,会产生不同的动画效果。

[图片上传失败...(image-b25ef9-1636101404926)]

如上图 WMS的结构层次可以简单概括为:

RootWindowContainer -> DisplayContent -> DisplayArea -> Task -> WindowToken -> WindowState

[图片上传失败...(image-2bdd8a-1636101404926)]

根据操纵层级的不同我把动画分类为:窗口动画、过渡动画、Task动画、全屏动画等等

[图片上传失败...(image-d5ed20-1636101404926)]

在窗口布局(relayout)阶段调用到

WindowStateAnimator#commitFinishDrawingLocked ->

WindowState#performShowLocked ->

WindowStateAnimator#applyEnterAnimationLocked

开启窗口动画流程

frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java中定义了一个mSurfaceAnimator成员变量

SurfaceAnimator的startAnimation方法中创建Leash,可以通过SurfaceAnimator的类注释了解Leash

为什么引入Leash可以参考此文: Android P——LockFreeAnimation

mAnimation.startAnimation这一步最终会通过LocalAnimationAdapter找到WMS里的SurfaceAnimationRunner进行执行。

这是 WindowContainer与SurfaceAnimtor、SurfaceAnimationRunner的持有关系 :

[图片上传失败...(image-f741c0-1636101404926)]

往编舞者上抛的runnable是执行startAnimations方法

SurfaceAnimationRunner#startAnimations ->
SurfaceAnimationRunner#startPendingAnimationsLocked
会从mPendingAnimations遍历RunningAnimation并执行startAnimationLocked

这一步构建了一个SfValueAnimator来真正的驱动动画,每一帧的处理是通过WindowAnimationSpec构建真正要执行的动画事务,然后使用mChoreographer.postCallback在下一个vsync信号到来时提交动画事务。
ValueAnimator驱动动画的原理本文就不做深入了。

下一篇文章我将进一步分析Activiy的过渡动画和屏幕旋转动画的相关流程。

Android WMS动画系统初探(二)

Android WMS动画系统初探(三)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 2020考研科目时间表考研时间及考试内容安排 微信怎么卖足球 足球怎么引流到微信 怎么做好一个足球公众号? 中国人民解放军西安政治学院的教学科研 军队科研项目开什么发票 部队的工程项目属于科研项目吗 环氧自流平地面和环氧树脂地坪的区别 水泥自流平和环氧自流平的区别 dlp3d打印打印不了透明树脂吗 dlp3d眼镜可以去电影院用吗 贵阳北尚华城是安置房吗 青蛉的读音青蛉的读音是什么 白蛉的读音白蛉的读音是什么 蛉的拼音 88金标梅洛红葡萄酒保质期 住房公积金提不出来怎么办 信用卡无法及时还款要怎么和银行沟通? 16年宝马3系11万公里二手车价格多少? 宝马320二手车估价是多少? 2010年宝马3系E90十三年的车跑了十六万多公里低配的还能卖多少钱? 上海新光电讯厂改名 陈伟民做什么行业的?城地股份副总裁 企业的KPI应该由哪个部门制定? any和some的区别是什么 怎么把壁纸加入到aero壁纸里 并在个性化里显示 歌词里面的~~in the house到底表示什么意思 in the house的意思 在嘻哈音乐里,歌词中的什么。。。。。in the house ,。。。check it out,是什么意思呀 那首‘今天你要嫁给我’歌的歌词里面“DT in the house”里的DT是什么意思啊? jolin in the house什么意思? 深渊骑士库卡斯结局 最新出的好看的玄幻小说,要求如下。 sunshy的翻译是:什么意思 sunshy angel是什么意思 sunshy是什么牌子的检测仪表 temorrow sunshy.是什么意思 歌词里有一句“you are my sunshy,my only sunshy"那英文歌的名字是什么? 肌电图显示静息正悦波,纤颤电位,束颤电位是啥意思? 三月桃花水酒窝指什么 三月桃花水一千朵桃花一万个小酒窝指什么