zoukankan      html  css  js  c++  java
  • Android动画的实现原理 .

    1.动画运行模式

         独行模式

         中断模式

    2.Animation类

          每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类,这个方法会被父类的getTransformation方法调用。另外每个动画还有个initialize方法,完成初始化工作,动画开始前的一些准备工作。

    3.Interpolator类

          定义动画执行过程一些加速度减速度,为了我们后面Transformation来服务的。

    4.Transformation类

          Transformation记录了仿射矩阵Matrix,动画每触发一次,会对原来的矩阵做一次运算,View的Bitmap与这个矩阵相乘就可以实现相应的操作(旋转、平移、缩放等)。

          Transformation类封装了矩阵和alpha值,它有两个重要的成员,一是mMatrix,二是mAlpha(控制透明度)。

    5.View中实现动画的过程

          图形变换通过矩阵实现。图形变换是图形学中基本知识。简单来说就是,每种变换都是一次矩阵运算。在Android中,Canvas类包含当前矩阵,当前调用Canvas.drawBitmap(bm,x,y,Paint)绘制时,android会先把bmp做一次矩阵运算,然后将运算结果显示在Canvas上。这样编程人员只需不断修改Canvas的矩阵并刷新屏幕,View里对象就会不停的做图形变换,动画就形成了。

         View创建动画对象,设置动画属性,调用invalidate刷新屏幕,启动动画;

         invalidate方法触发了onDraw函数;

         在onDraw函数中:

         调用动画的getTransformation方法,得到当前时间点的矩阵

         将该矩阵设置成Canvas的当前矩阵

         调用canvas的drawBitmap方法,绘制屏幕。

         判断getTransformation的返回值,若为真,调用invalidate方法,刷新屏幕进入下一帧;若为假,说明动画完成。

  • 相关阅读:
    数学函数,字符串函数,聚合函数
    javascript大神修炼记(7)——OOP思想(多态)
    Join的表顺序
    java web 基础
    LVS入门
    Eclipse 一直提示 loading descriptor for 的解决方法
    nginx的配置总结
    nginx入门(安装,启动,关闭,信号量控制)
    如何正大光明的使用 google 进行搜索
    npm报错Error: ENOENT, stat 'D:NodeLearn ode-global'
  • 原文地址:https://www.cnblogs.com/zhongle/p/3936896.html
Copyright © 2011-2022 走看看