android animatorset 监听,Android源码分析--动画框架AnimatorSet

这一节,我要介绍的是AnimatorSet。

一提到android的动画,一定会涉及到AnimatorSet,因为他太好用了。它所封装的接口让很多复杂的动画叠加变得容易。

AnimatorSet是继承于Animator这个是非常重要的,因为AnimatorSet可以不停的叠加自身,最重要的是他本身就是一个Animator。

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们看一下他播放动画的方法,可以看到它返回的一个Builder的对象,可以推断它是使用建造者的形式,不断迭代动画。

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们看一下他实际构造的时候使用,保存在mCurrentNode的Node对象里面,Node应该是节点的意思。

每个动画都应该由节点构成

AAffA0nNPuCLAAAAAElFTkSuQmCC

其Builder里面存在着三种排序,with,before,after(字面意思应该都很清晰)

(1)with的节点可以看到他是通过Dependency的方法来填充到mCurrentNode里面的,很明显with是并行的

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们可以看到Dependency是只有WITH和AFTER两个时序。

AAffA0nNPuCLAAAAAElFTkSuQmCC

(2)当使用before的时候,相对于mCurrentNode是node节点之后,所以传入mCurrentNode到里面

AAffA0nNPuCLAAAAAElFTkSuQmCC

(3)当使用after的时候,相当于node节点是mCurrent节点之后,所以传入node到里面

AAffA0nNPuCLAAAAAElFTkSuQmCC

使用after延时,其实只是使用一个虚设一个ValueANimator来设定延时时间。

AAffA0nNPuCLAAAAAElFTkSuQmCC

然后我们看一下动画叠加真正的做法。

(1)playTogethor其实是使用with循环的叠加,其参数是不定量的数组的items

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们可以传入Collection的对象,意味着我们可以传入一个列表的Animator

AAffA0nNPuCLAAAAAElFTkSuQmCC

(2)playSequentially是不断使用before来将动画放在之后叠加

AAffA0nNPuCLAAAAAElFTkSuQmCC

setTarget的方法是循环获取node节点的animator动画,终节点通过ObjectAnimator来设置view目标

AAffA0nNPuCLAAAAAElFTkSuQmCC

setInterpolator设置时间插值器,这个插值器最后会在start的方法中是使用

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们接下来看一下动画播放的流程

(1)start的方法会先设置一些标志位,然后通过遍历节点node的animator对象来设置播放同步为false遍历设置每个动画对象的运行时间

还会设置每个对象的时间插值器

AAffA0nNPuCLAAAAAElFTkSuQmCC

当使用play,playTogethor,playSequentially的时候还会标志需要排列节点,如果node节点没有依赖关系的话,全部会被排列到父节点里面,然后再次循环移除node的依赖父节点,加入到tmproot次节点之后,这样会建立一个统一的mSortedNodes的数组

AAffA0nNPuCLAAAAAElFTkSuQmCC

然后通过遍历mSortedNodes数组移除旧的监听器,

设置nodesToStart来控制全部的节点,

然后再次添加上对应的DependecyListener和AnimatorSetListerner

AAffA0nNPuCLAAAAAElFTkSuQmCC

如果判断延时少于0 ,就把节点的animator播放,并加到mPlayingSet里面,

否则添加值ValueAnimator作为延迟空效果,并通过监听器来在遍历播放节点

AAffA0nNPuCLAAAAAElFTkSuQmCC

通过通过回调来调用每个节点监听器的onAnimationStart,

如果判断节点内其全部的节点都被执行完,木有延迟,那么触发节点的onAnimationEnd的方法

AAffA0nNPuCLAAAAAElFTkSuQmCC

start的方法其实还需要涉及到DependecyListener

这里可以看明白,器通过调用onANimationStart和onAnimationEnd判断运行rule的规则来判断是否启动动画

AAffA0nNPuCLAAAAAElFTkSuQmCC

通过判断父AnimatorSet是否被取消返回

然后判断移除dependencies依赖关系

当全部依赖关系满足的时候,就开启动画

AAffA0nNPuCLAAAAAElFTkSuQmCC

(2)使用pause的方法,会让所有延迟的方法暂停,然后调用每个节点里的pause方法

AAffA0nNPuCLAAAAAElFTkSuQmCC

然后循环调用节点里面的onAnimationPause的方法,暂停每个动画。

AAffA0nNPuCLAAAAAElFTkSuQmCC

pause的方法是停止在中间的状态。

resume的方法也是类似的,用来恢复当前pause状态的动画运行

(3)canel的方法中,需要判断是否正在播放

如果正在播放会全部调用节点onAnimationCancel的方法,

然后再遍历调用延时动画的cancel方法和节点动画的cancel方法。

最后出发节点的onAnimationEnd的方法。

AAffA0nNPuCLAAAAAElFTkSuQmCC

触发剩余调用节点onAnimationCancel的方法,

AAffA0nNPuCLAAAAAElFTkSuQmCC

将全部动画监听器移除,将mPlayingSet的动画移除

将剩下的动画onDone状态设置为false,

触发节点的onAnimationEnd的回调方法

AAffA0nNPuCLAAAAAElFTkSuQmCC

cancel之后动画会停留在中间运行的状态

(4)另外一种end的方法也是可以停止动画运行,

可以看到会停止掉延迟,

然后调用每个动画的end方法和onAnimationEnd的方法,

最后设置回start的标志

AAffA0nNPuCLAAAAAElFTkSuQmCC

end和cancel的不同是,调用了end的方法,它会把动画直接发生整个动画的最后一帧然后停止。

关于AnimatorSet的源码分析就到这里了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017年全球最具影响力50家机器人公司排行榜!我国企业基本都有研发类似产品!

来源:机器视觉 概要:ABB Robotics是一家成立于1988年的瑞士工业机器人公司,主要涉及(新)能源和矿业、基础设施、生产/农业、供应链四个领域,关键技术包括数字化连接、工业设备和系统安装。 以下就是 2017 年…

android go 最小内存,谷歌更新Android Go新规则,由原本的支持低于1G内存设备上升到2G...

原标题:谷歌更新Android Go新规则,由原本的支持低于1G内存设备上升到2G说起安卓系统想必很多人都知道,但是你知不知道还有一个叫做安卓Go的系统呢?这个安卓Go的系统最初是谷歌在I/O 2017全球开发者大会上所发布的,它的…

神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!

来源:全球人工智能 概要:好莱坞导演们并非是对此问题困惑不解的唯一群体。随着机器智能的飞速发展,它不仅能在魔兽争霸(DOTA)和围棋这样的游戏中战胜人类玩家,而且对战过程中还不需要人类的专业知识&#x…

斯坦福大学「黑盒学习」研究:使用神经变分推理的无向图模型,可替代「采样」 | 附NIPS 2017论文

来源:雷克世界 编译:嗯~阿童木呀、多啦A亮 概要:机器学习中的许多问题可以自然地用无向图模型的语言表达。在这里,我们提出了无向模型的黑箱学习和推理算法,优化了模型的对数似然的变分近似。我们的方法的核心是我们表…

在html中怎么设置页面边距,在打印网页时怎么设置调整页边距

在打印网页时怎么设置调整页边距今天给大家介绍一下在打印网页时怎么设置调整页边距的具体操作步骤。1. 首先打开电脑,找到想要打印的网页打开。2. 点打开之后,在页面右上角点击三横图标。3. 在弹出的选项中点击“打印”选项。4. 进入打印页面后&#xf…

果蝇大脑研究能够改进计算机相似性搜索算法

来源:cnBeta.COM 概要:一项新的研究表明对果蝇大脑的研究可能作为计算机科学算法改进的关键基础,增强搜索引擎/人工智能在“相似性搜索”算法方面的准确性。 一项新的研究表明对果蝇大脑的研究可能作为计算机科学算法改进的关键基础&#xff…

ie11不识别html5影片,IE11无法显示flash?IE11无法播放视频的解决方法

ie11无法显示flash怎么办呢?ie11无法播放视频了,ie10也出现同样的问题,这该怎么办呢?下面小编就给你带来ie11无法显示flash解决方法。方法一:关闭IE10/IE11的Active刷选功能由于Adobe Flash Player IE版采用ActiveX控件加载方式运作&#x…

物联网时代传感器厂商竞争格局揭秘

来源:WPR 概要:中国作为全球最大的传感器消费市场,物联网产业圈的构建势在必行, 据预测,“十三五”期间,我国传感器市场年均复合增长率将达到30%以上。 中国作为全球最大的传感器消费市场,物联网…

html改元素怎么保存,是否可以在NW.js中保存html元素更改?

我正在开发一个简单的应用程序,允许用户上传图像和视频,同时这样做会自动为上传并包装的每个内容生成。每个上传的图片都保留在前一个特别风格化的图片旁边。我想要的是每次上传后(图片或视频),即使我关闭我的应用程序,它仍然存在…

机器对工作、生产力及全球经济的影响

来源:亿欧 概要:计算机科学家,经济学家和行业专家谈到了包括法律政策,技术挑战和辅助技术在内的一系列话题。 本周,麻省理工学院举办了“人工智能与工作的未来”峰会,重点讨论帮助行业,政府和员…

Html如何触发闹铃,事件闹钟设置.html

事件闹钟设置$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html…

CapsNet日益火爆!Hinton大神横扫AI界的「胶囊网络」如何理解?

来源:雷克世界 编译:嗯~阿童木呀 概要:Geoff Hinton等人最近关于胶囊网络(Capsule networks)的论文在机器学习领域造成相当震撼的影响。 Geoff Hinton等人最近关于胶囊网络(Capsule networks)的…

html code box插件,VS Code常用插件

基础必备插件1、View In Browser在浏览器里预览网页必备。2、vscode-icons改变编辑器里面的文件图标,个人比较稀饭这个。其他的这里就不说了。在这里插入图片描述3、Bracket Pair Colorizer给嵌套的各种括号加上不同的颜色。在这里插入图片描述4、Highlight Matchin…

新研究旨在用“黑箱”算法解决人工智能偏差问题

来源:亿欧 概要:随着越来越多的自动化决策,能够理解AI如何思考对我们来说变得越来越重要。 随着越来越多的自动化决策,能够理解AI如何思考对我们来说变得越来越重要。从挑选股票到检查X射线,人工智能越来越多地被用来…

清华大学:刘洋——基于深度学习的机器翻译

来源:图灵人工智能 概要:机器翻译的目标是利用计算机实现自然语言之间的自动翻译。机器翻译经历了规则机器翻译、统计机器翻译、神经机器翻译。 刘洋,清华大学计算机科学与技术系副教授,博士生导师,国家优秀青年基金获…

CMU本科计算机科学,CMU计算机科学学院本科难录吗?

卡内基梅陇大学计算机科学学院难录吗?CMU各个学院最难录的一个!1、2020第一学年新生计算机科学学院本科录取率:APPLICATIONS:6,681ADMITTED:479ENROLLED:219录取率:7%2、2020年卡内基梅陇大学计算机科学学院本科录取分数要求&…

从神经科学到计算机视觉:人类与计算机视觉五十年回顾

来源:全球人工智能 概要:在过去某段时间里,研究者们可能从来没有想过创建类似人类大脑处理任务一样的系统。 如何像人类大脑一样完成一项视觉任务是复杂的,比如深度感知、目标跟踪、边缘检测等,而扫描环境和定位是大脑…

计算机维修队,浙江万里学院计算机维修队

浙江万里学院计算机维修队语音编辑锁定讨论上传视频浙江万里学院计算机维修队是在校团委、计算机与信息学院的直接关怀与支持下,于2001年成立的一个公益性学生社团。她集维修、咨询、开展活动于一体,拥有较强的技术实力。计算机维修队根本任务是在浙江万…

深度解读:美国自动驾驶技术及测试示范区现状

来源: 公安部交通管理科研所微发布 作者:袁建华、王敏、陆文杰、罗为明、郑羽强 ,道路交通集成优化与安全分析技术国家工程实验室自动驾驶测试技术研发部 当前,美、欧、日等发达国家及地区对智能网联技术的支持不仅是在政策研究、…

计算机一级考试题组成,计算机一级考试试题汇总

计算机一级考试试题汇总2017年9月计算机一级考试将于9月23日-26日进行,为帮助考生们复习备考,以下是百分网小编搜索整理的一份计算机一级考试试题汇总。A 第一部分:单选题(每小题1分共30分)注意:打开你考试文件夹中的EXCEL工作簿文…