Android Animation的实现原理

出处:http://www.jianshu.com/p/3683a69c38ea

本篇博客我将和大家一起学习Android Animation的实现原理, 而不是Animation的使用

Animation的分类

-Tweend动画即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果

-Frame 动画即顺序播放事先做好的图像,跟电影类似

Android 动画框架原理

要了解Android动画是如何加载出来的,我们首先要了解Android View 是如何组织在一起的.每个窗口是一颗View树. RootView是DecorView,在布局文件中声明的布局都是DecorView的子View.是通过setContentView来设置进入窗口内容的. 因为View的布局就是一棵树.所以绘制的时候也是按照树形结构来遍历每个View进行绘制.ViewRoot.java中 draw函数准备好Canvas后 调用 mView.draw(canvas),这里的mView是DecorView.下面看一下递归绘制的几个步骤:

1.绘制背景

2.如果需要,保存画布(canvas),为淡入淡出做准备

3.通过调用View.onDraw(canvas)绘制View本身的内容

4.通过 dispatchDraw(canvas)绘制自己的孩子,dispatchDraw->drawChild->child.draw(canvas) 这样的调用过程被用来保证每个子 View 的 draw 函数都被调用

5.如果需要,绘制淡入淡出相关的内容并恢复保存的画布所在的层(layer)

6.绘制修饰的内容(例如滚动条)

当一个 ChildView 要重画时,它会调用其成员函数 invalidate() 函数将通知其 ParentView 这个 ChildView 要重画,这个过程一直向上遍历到 ViewRoot,当 ViewRoot 收到这个通知后就会调用上面提到的 ViewRoot 中的 draw 函数从而完成绘制。Android 动画就是通过 ParentView 来不断调整 ChildView 的画布坐标系来实现的


这里写图片描述

动画的具体实现

Animation动画Transformation顾名思义 :变化Animation 中主要定义了动画的一些属性比如开始时间、持续时间、是否重复播放等在Animation中有两个重要的函数:

1.getTransformation getTransformation 中 Animation 会根据动画的属性来产生一系列的差值点,然后将这些差值点传给 applyTransformation

2.applyTransformation 这个函数将根据这些点来生成不同的 Transformation
Transformation中包含一个矩阵和 alpha 值,矩阵是用来做平移、旋转和缩放动画的,当调用dispatchDraw时会调用getTransformation来得到当前的Transformation**,如下:


所以具体的动画只需要重载 applyTransformation 这个函数即可

读到这里,相信大家应该对animation的原理有所了解. 如果你感觉这篇文章很难理解,建议先去学习有关的基础知识.欢迎大家提问,互相进步.



文/UniGenius_Mx(简书作者)
原文链接:http://www.jianshu.com/p/3683a69c38ea



想知道android动画该怎么学吗?戳 如何高效学习Android动画?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值