位置: 编程技术 - 正文

Android属性动画-Property Animation(一) 原理分析(android 属性动画改变view大小)

编辑:rootadmin

推荐整理分享Android属性动画-Property Animation(一) 原理分析(android 属性动画改变view大小),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android的动画类型,android属性动画插值器,android 属性动画 缩放,android属性动画不流畅,android属性动画平移,android属性动画平移,android属性动画平移,android 属性动画,内容如对您有帮助,希望把文章链接给更多的朋友!

Property Animation

我们为什么要用属性动画(Property Animation)?它与视图动画(View Animation)有什么不同?

之前我们使用的View Animation,它只能对View对象进行操作,而且只有几种有限的动画效果,例如增大缩小,平移,旋转等,我们甚至不能改变它的背景颜色。它的另一个缺点是,它仅仅是改变了这个View在屏幕上画出来的位置,并没有改变它本身的属性。例如:我们将一个Button从屏幕左边平移到屏幕右边,它所改变的只是它自己的样式在屏幕右边重画出来了,而他自己本身(肉体)仍然在屏幕的左边,我们在屏幕右边点击它是点击不到的,因为他的属性(坐标点)仍然在屏幕的左边,这一定不是我们想要的结果! 属性动画完美的解决了上面的问题,我们不管看得见还是看不见,只要它是一个对象,它有属性,我们就可以让他动起来,而且是 肉体和灵魂一起动! 当然,View Animation很轻量级,只需要几行代码就可以搞定,如果我们可以用View Animation搞定,例如:一个界面加载等待时不断转圈的小圆圈。我们就没有必要使用属性动画了。

属性动画是Android中非常强大的一个动画系统。谷歌文档中有这样一句话:The property animation system is a robust framework that allows you to animate almost anything,意思是我们可以使任意一个属性动起来,说白了就是改变他的&#;。说起动画,我们往往会想到那些绚丽的动画效果,其实这些动画效果,就是在一段时间内,改变了这个物体的某个属性&#;,再将它重画到屏幕上,我们看上去他好像动起来了一样!因此,我们可以指定一个对象中的任意一个属性,让他在一段时间内,以某种变化的速率,来改变属性的&#;。即使我们在屏幕上根本就看不见这个对象,我们仍然可以改变这个对象中某个属性的&#;。

例如:下面是Google文档中的一张图,我们可以改变一个物体的位置(即他的x属性),让他在一段时间内从屏幕的左边(x=0)匀速移动到屏幕的右边(x=)。

我们可以看出这个物体在ms内水平移动了个像素,每ms就会移动像素,这是个匀速移动,即在ms内以像素/ms的速度把x的&#;从0增加到。

我们换一种情况:

同样是这个物体,同样是ms内从x=0移动到x=,但是这次的速度明显不是匀速,而是先加速后减速!如果我们改变完x的&#;以后,再去重画这个物体的话,那么这个物体不就动起来了吗!这就形成一个动画效果了!

我们可以还可以做些什么?

1.我们可以指定动画的持续时间,即上例中的ms,如果我们不设置的话,系统默认是ms

Android属性动画-Property Animation(一) 原理分析(android 属性动画改变view大小)

2.我们可以指定属性以什么样的速率来变化,即上例中的匀速,先加速后减速等等。

3.我们可以指定动画的重复次数,以及是否“回放”。即上例中物体从左边移动到右边,以相同的速率再从右边移动到左边,以及来回重复几遍。

4.我们可以指定一个动画集合,即在上例中,我们可以在物体向右移动的过程中,同时改变它的背景颜色,还可以等他移动到最右边时,再将他的体积增大一倍!

5.我们可以指定帧刷新周期,但最终还是要由当前cpu使用率以及设备的硬件来决定,默认是ms

下面我们来仔细看一下属性动画的执行过程

ValueAnimator我们可以称之为一个动画引擎,它可以协调一个完整动画的执行过程,ValueAnimator内部有一个计时器,用来记录当前动画执行到什么百分比,然后计算当前属性的&#;,并且再赋给当前对象,从而改变属性的&#;。下一篇文章我们将详细介绍ValueAnimator的使用方法。 ValueAnimator内部会计算出一个elapsed fraction(其实就是fraction,之所以要说成elapsed fraction,是因为方便与后面的Interpolated fraction区分开,方便分析),这是一个系数,它用来表示整个动画周期的时间百分比,大小为0到1之间的一个小数。例如:elapsed fraction=0,表示当前时间进度为0%。elapsed fraction=0.5,表示时间进度%。elapsed fraction=1,表示动画执行了%。这个elapsed fraction非常重要。它是整个动画的一个时间轴。在匀速移动的例子中,完整动画执行时间为ms,那么在ms时候,elapsed fraction=0.。在ms的时候,elapsed fraction=0.5。在ms的时候,elapsed fraction=1。TypeEvaluator就是根据fraction来计算属性的&#;,它计算的公式为result=x0&#;fraction*(x1-x0)。其中x0是属性的起始&#;,对应例子中的0;x1是属性的结束&#;,对应例子中的;fraction就是上面说的一个时间百分比的系数,我们试着计算一下。当ms的时候,当前fraction=0.。result=0&#;0.*(-0)=当ms的时候,当前fraction=0.5。result=0&#;0.5*(-0)=。和上面的结果正好对应。 那么先加速后减速是怎么实现的呢?下面就该TimeInterpolator出场了,TimeInterpolator也会计算一个fraction,我们称之为interpolated fraction(其实就是fraction,是为了与上面的elapsed fraction区分开,方便分析)。上面先加速后减速那个例子,就是由这个TimeInterpolator决定的,在ms的时候,elapsed fraction=0.。那么TimeInterpolator计算出来的interpolated fraction=0.。TimeInterpolator修改了fraction的&#;,我们来计算一下,result=0&#;0.(-0)=6。在ms的时候,elapsed fraction=0.5。此时interpolated fraction=0.5。result=0&#;0.5*(-0)=。在ms的时候,elapsed fraction=0.。interpolated fraction=0.。result=0&#;0.*(-0)=。在ms的时候,elapsed fraction和interpolated fraction同时到达1。

Note:其实系统中只有一个fraction,并没有elapsed fraction 和interpolated fraction。只不过是为了方便分析,作为对比,elapsed fraction是我们假想出来的,作为一个标准,来和TimeInterpolator计算出来的fraction进行一个比较。TimeInterpolator会直接修改fraction的&#;。其实在整个动画过程中,是fraction在以线性,或者先增速后减速来改变。从而决定属性变化的速率。 当我们设置好了ValueAnimator的TimeInterpolator、TypeEvaluator、duration、startPropertyValue、endPropertyValue后。调用start()方法,这个动画引擎就开始工作了!我们使用ValueAnimator的时候,一定要实现一个ValueAnimator.Animator UpdateListener接口,用来监听属性的变化。getAnimatedValue()可以实时获取计算出来的属性&#;。然后再回调onAnimationUpdate()方法。告诉系统我当前的属性&#;已经改变,你可以更新属性&#;了,而且你可以进行重画了!这样一个物体就动起来了,就形成了动画效果。 这篇文章我们只是介绍了一下属性动画是什么,它的工作原理是什么。下一篇文章我们将详细分析属性动画的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。

MaterialCheckBox packagecom.nsb.app.ui.view;importandroid.animation.ValueAnimator;importandroid.annotation.TargetApi;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandro

JAVA颜色代码RGB颜色代码 我们在编程中常常用到十六进制颜色码。下面是颜色码对照表-英文名称-十六进制-RGB:英文代码形像颜色HEX式RGB式LightPink浅粉色#FFB6C,,Pink粉红

android ichart ColumnStacked2D图表无法显示解决方案 html!DOCTYPEhtmlhtmlheadmetacharset=UTF-8/titleHelloWorld/titlemetaname=Descriptioncontent=/metaname=Keywordscontent=//stylescripttype=text/javascriptsrc=ichart.latest.min.js/scriptscripttype=text/jav

标签: android 属性动画改变view大小

本文链接地址:https://www.jiuchutong.com/biancheng/378095.html 转载请保留说明!

上一篇:AndroidStudio中如何加载so库(androidstudio 教程)

下一篇:MaterialCheckBox

  • 个人所得税纳税记录
  • 房地产企业增值税计算
  • 租集体土地建厂合法吗
  • 预提所得税的计税基础
  • 分期收款销售的基本业务处理
  • 期末数减期初数等于
  • 事业单位固定资产入账标准最新规定
  • 公允价值变动损益属于当期损益吗
  • 房地产开发企业预收款预缴增值税
  • 一般纳税人取得3%专票可以抵扣吗
  • 增值税专用发票可以开电子发票吗
  • 实收资本属于会计科目吗
  • 农村承包土地能卖土吗
  • 商业保险可以税前全额扣除吗?
  • 申报状态显示申报失败
  • 购货方申请红字发票怎么申报
  • 企业股权溢价转让会计分录
  • 实收资本印花税申报期限
  • 专用发票地址写错字了能用吗
  • 预充值发票可以列支吗?
  • 6%的增值税发票能抵扣13%的吗
  • 年终汇算清缴怎么计算
  • 简易计税劳务分包发票可以差额抵扣吗
  • 双系统跳过磁盘检测
  • 所得税费用是什么账户类型
  • win11绿屏是什么原因
  • 不是第三方的贷款app
  • 高新企业研发费用比例
  • windows7旗舰版最新版本
  • 限售股交易征税是多少
  • 龙舌兰 (© Moab Republic/Shutterstock)
  • php简单么
  • 材料短缺计入
  • php获取指定日期的星期几的方法是
  • 机器学习中的数学原理——过拟合、正则化与惩罚函数
  • c++图像二值化
  • 存货盘盈盘亏的会计处理
  • 残保金缴纳需要计提吗
  • 银行罚息是财务收入吗
  • 财务报表年报和汇算清缴的顺序
  • 增值税发票记账联用途
  • 一整天的时间从几点到几点
  • 开专用发票可以直接写加工费这个明细吗?
  • 公对私转账有什么风险
  • 工商年审中实缴还是虚缴
  • 原始凭证审核要点包括
  • 暂时性差异的产生
  • 合并报表非同控为什么调公允
  • 应收账款周转率越高越好吗
  • 固定资产计提折旧的原则
  • 企业垃圾桶
  • 现代服务业主要包括哪些类型
  • 年底未分配利润为负数怎么做分录
  • 合并编制报表主要有哪几种
  • 投资性房地产的范围
  • mysql实现合并同一ID对应多条数据的方法
  • mysql 的replace into实例详解
  • mysql更新表中的数据
  • win8系统打开苹果系统文件
  • windowsserver2003ftp服务器怎么搭建
  • ubuntu怎么安装程序
  • fedora怎么用
  • linux 维护命令
  • sniffer.exe - sniffer是什么进程
  • 进程lsass.exe
  • windows8.1u盘安装教程
  • win7系统如何关闭开机自动启动软件
  • win7弹出cmd窗口瞬间消失
  • flash插件app
  • ,linux
  • Android Chronometer(定时器)
  • Unity3D游戏开发引擎
  • cd弹出错误怎么回事
  • 天气球球下载
  • javascript获取html元素的方法
  • 注册财税公司需要什么条件
  • 哪些可以享受三免一补
  • 贵州电子税务局怎么登录
  • 企业的捐赠支出在哪里能看到
  • 股权转让是否要交土地增值税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设