Android Animation 机制详解

Android Animation 机制详解

目录

[TOC]
本篇博客我将和大家一起学习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的原理有所了解. 如果你感觉这篇文章很难理解,建议先去学习有关的基础知识.欢迎大家提问,互相进步.

1

  1. 这是一篇 笔记 ,供大家学习和参考
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值