Android Animation 机制详解

作者: UniGenius_Mx | 来源:发表于2016-02-24 17:48 被阅读2074次

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

    [footnote][footnote]: 这是一篇笔记,供大家学习和参考---------

    相关文章

      网友评论

      • 68768b474bfc:applyTransformation函数可以当成一个差值器来用,不知我有没有理解错😁
        UniGenius_Mx:@TellH 是吗. 具体点呢?没考虑过
        68768b474bfc:@UniGenius_Mx 对,其实可以用这个方法可以实现属性动画的效果
        UniGenius_Mx:@TellH applyTransformation 已经有具体的差值可以使用 方法内根据差值实现具体的效果

      本文标题:Android Animation 机制详解

      本文链接:https://www.haomeiwen.com/subject/byjikttx.html