android动画详解二 属性动画原理
property动画是一个强大的框架,它几乎能使你动画任何东西。你可以定义一个动画来改变对象的任何属性,不论其是否被绘制于屏幕之上。一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值。要动画某个东西,你需指定对象的目标属性,比如位置,动画的持续时间,和改变的值的范围。
属性动画系统允许你指定以下动画属性:
· Duration: 动画持续时间。默认是300 ms.
· Time interpolation: 你可以指定一个函数来定义如何跟据当前的时间计算属性的值。
· 重复次数和行为: 你可以指定是否当动画结束时重新开始以及重复的次数。你还是可以指定是否让动画倒着播放。设置动画倒着播放使得动画先正播再倒播这样反复进行,直到到达所限制的重复次数。
· 动画集: 你可以将多个动画在逻辑上放到一个组中一起播放或依次播放或按指定的延迟时间播放。
· Frame refresh delay: 你可以指定动画的帧刷新频率。默认是设置为10 ms,但是你的应用能刷新帧的实际速度最终决定于系统的忙碌程度和系统执行后台代码的速度。
· 属性动画如何工作
首先,我们用一个例子来大体了解一下一个动画如何工作。下图描述了某个对象要动画其x属性,这代表它的横向位置。动画持续时间被设置为40 ms并且其动画距离被设置为40 像素。每10 ms移动10像素。在40ms后,动画停止,对象停在了40的位置上。这是一个使用线性插值的对象,表示对象匀速移动。
图 1. 线性动画的例子
你也可以使用非线性插值的动画。下图演示了一个开始加速,最后减速的动画。对象还是在40秒内移动40像素,但是是非线性的。开始加速到半路然后减速直到最后。就像下图所示,开始和结束时移动的距离比中间移动的距离短。
图 2. 非线性动画的例子
让我们仔细看一下属性动画系统是如何计算上图所示的动画的重要部分的。下图演示了主要类之间如何相互操作。
Figure 3. 动画是如何计算的
ValueAnimator 对象保持追踪动画的时间,比如动画已运行了多长时间,以及属性的当前值。
ValueAnimator 封装了一个TimeInterpolator, 它定义了动画插值算法,还封装了一个TypeEvaluator,它定义了如何去计算属性的值。例如,在图2中,使用的TimeInterpolator是 AccelerateDecelerateInterpolator 并且使用的TypeEvaluator 是IntEvaluator.
要开始一个动画,需创建一个ValueAnimator 然后告诉它所要动画的属性的开始和结束的值,还有动画持续的时间。当你调用start() 时,动画就开始了。在动画进行期间,ValueAnimator 跟据动画的持续时间和已经过的时间,计算出一个表示进度的比例的分数(0和1之间),进度分数代表了动画已进行的时间的百分比,0代表0%,1代表100%。例如,图1中进度分数 在t = 10 ms时值为.25,因为总时间是t = 40 ms。
当ValueAnimator 计算完成一个进度分数,它就调用TimeInterpolator 去计算一个插值分数。插入分数结合所设置的时间插值把进度分数映射到一个新的分数。例如,在图2中,因为动画缓慢加速,在 t = 10 ms时,插值分数为.15,小于进度分数为.25。在图1中,插值分数进度分数永远相等。
当计算插值函数时,ValueAnimator 会调用适当的TypeEvaluator来基于插值函数、开始值、结束值计算你在动画的属性的值。例如,在图2中,插值函数值在 t = 10 ms时为.15 ,所以些时属性的值将是.15 X (40 - 0),或6。
上一篇:android动画详解一 概述
下一篇:android动画详解三 动画API概述
Android很多时候要用NDK开发,对于C语言不是很熟悉的小伙伴,可以看一下本人录制的视频教程:http://edu.csdn.net/course/detail/2057
希望对你们有所帮助!
android动画详解二 属性动画原理相关推荐
- Android Linker详解(二)
Android Linker详解(二) Android Linker详解(二) 本文目的 So的链接 So重定位 总结 本文目的 接上篇Linker源码详解(一),本文继续来分析Linker的链接过程 ...
- Android的三种动画详解(帧动画、View动画、属性动画)
Android的动画分为了三种, 分别是 帧动画.View动画.属性动画. 1.帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单, ...
- 补间动画详解五 缩放动画ScaleAnimation
ScaleAnimation是尺寸变化动画的类,控制View的尺寸变化. ScaleAnimation类官方文档: https://developer.android.com/reference/an ...
- 骨骼动画详解 和 帧动画
骨骼动画 vs. 精灵表(sprite sheets) 创建动画又快又简单的方法是使用"精灵表"(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来, ...
- iOS动画详解(学习动画看这一篇就够了)
2019独角兽企业重金招聘Python工程师标准>>> 原文出处:wu大维 动效设计一直是iOS平台的优势,良好的动效设计可以很好地提升用户体验.而动画则是动效的基础支撑.本动画将从 ...
- eureka需要替换吗_iOS第三方库Eureka实现定制动画详解(二):万变不离其宗-Row组件...
Eureka的核心就是Row,所以我们得重点聊聊它.Row是什么?其实上面已经说过了,不过这只是干巴巴的概念,下面本猫用一个实际的例子带大家性感,哦,不-是感性的认识一下到底什么是Row 新建一个iO ...
- android菜单详解二:选项菜单
创建一个选项菜单 选项菜单里应该包含基本的activity动作和必须的导航条目 (例如,一个打开程序设置的菜单项). 选项菜单的菜单项有两种不同的选择方法,一是菜单项按钮,二是通过 Action Ba ...
- Android Fragment详解(二):Fragment创建及其生命周期
Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...
- [转] ReactNative Animated动画详解
http://web.jobbole.com/84962/ 首页 所有文章 JavaScript HTML5 CSS 基础技术 前端职场 工具资源 更多频道▼ - 导航条 -首页所有文章JavaScr ...
最新文章
- Splunk 会议回想: 大数据的关键是机器学习
- error while loading shared libraries: ../../lib/libopencv_core.so
- 基于FPGA多通道数据采集系统verilog设计
- java 堆栈_Java中线程与堆栈的关系
- linux不支持32,Visual Studio Code 1.36发布,不再支持Linux 32位
- Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
- php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误
- 利用hibernate中的SchemaExport生成数据表
- CSharp for Jupyter Notebook
- (Python第七天)实例二玩转函数
- python 响应代码_Python HTTP响应
- jupyter 无法提示代码,报错TypeError: __init__() got an unexpected keyword argument ‘column‘
- cpu开机就是60℃_注意,制冷机组开机前这些检查很重要
- go 302不记录cookie_gin pprof 记录日常操作
- 解释器实例之算数计算(四)
- php 扫描器源代码,php端口扫描器代码
- linux 多线程服务端编程 pdf,Linux 多线程服务端编程.pdf
- Winrunner经验
- 备战2022年5月软考高项 —— 信息系统项目管理师
- Beyond Accuracy:Behavioral Testing of NLP Models with Checklist 论文阅读
热门文章
- 论文阅读:RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
- 运动耳机哪个牌子音质好、音质最好的运动耳机品牌排行
- INFO: This is taking longer than usual. You might need to provide the dependency resolver with stric
- icloud连接服务器时出现问题_苹果icloud连接超时怎么办 icloud服务器连接超时解决方法...
- c语言汉字的存放和输出,怎么在C语言里用printf输出一个中文
- python-正则匹配163格式邮箱
- 快速搭建校园局域网课程点播+直播学习平台
- 保护 IT 基础设施的多层安全技术-扩展检测与响应 (XDR)
- 直播预告:知识图谱推理问答综述 | AI TIME PhD 知识图谱专题-3
- html怎么给一个字母加边框,教您使用html代码给文字加边框!