Android-动画实现原理

Android-动画实现原理

一 实现原理:

图形变换通过矩阵实现。图形变换是图形学的基本知识,简单来说就是,每种变换都是一次矩阵运算。

在Android中,CAnvas类中包含当前矩阵,当调用Canvas.drawBitmap(bmp, x, y, paint)绘制时,Android会先把bmp

做一次矩阵运算,然后将运算的结果显示在Canvas上。这样,我们只需要不断修改Canvas的矩阵

并刷新屏幕,View里面的对象就会不停的做图形变换,动画就形成了

二 具体过程

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

2,invalidate方法触发了onDraw函数

3,在onDraw()函数中进行下面的步骤

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

5,将该矩阵设置为Canvas的当前矩阵

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

7,判断getTransformation的返回值,为真,调用invalidate方法,

刷新屏幕进入下一帧,为假,动画结束

如下图:

三 动画运行模式

1,动画运行模式:使用的是独占模式

独占模式:

程序在主线程中进入一个循环,根据动画指令不断刷新屏幕,直到动画结束

中断模式:

另外开启线程

四 动画使用的常用类

每个动画都重载了父类的applyTransformation方法,这个方法

会被父类的getTransformation方法调用,另外每个动画还有个initialize方法,完成初始化工作

1,Animation

使用的基本类,4中补间动画都继承它

2,Interpolater类

动画的插入器类,用于描述动画的过度效果

3,Transformation类

这个类记录了仿射矩阵Matrix,动画每触发一次,就会对原来的矩阵做一次运算

View的Bitmap与这个矩阵相乘即可实现相应的操作(旋转,平移,缩放)

这个类封装了矩阵和alpha值,有两个重要的成员,一是mMatrix,还有事mAlpha

五 为Activity指定动画效果

通过xml配置

1,修改Activity的Theme

在style.xml中定一Activity的切换动画,一般定义四种

左边进出,右边进出。

<style name="AnimationActivity" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
<item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
</style>

2,然后在themes.xml中设置主题风格为style.xml中定义的xml

<style name="ThemeActivity">
<item name="android:windowAnimationStyle">@style/AnimationActivity</item>
<item name="android:windowNoTitle">true</item>
</style>

3,在AndroidManifest文件中为Activity指定theme

<activity android:theme="@theme/ThemeActivity">

使用代码设定

可调用overridePendingTransition实时修改Activity的切换动画

但是需要注意的是:该函数必须在调用startActivity()或者finish()后立刻调用,切只有效一次

版权声明:欢迎交流指正文章的错误,必定虚心接受,QQ872785786

时间: 2024-10-10 13:49:38

Android-动画实现原理的相关文章

打造简易NineoldAndroids动画库,深入理解Android动画原理

简介 NineoldAndroids是Github上一个著名的动画库,简单来说,NineOldAndroids是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画. 网上已经有一些文章,介绍了这个库的设计,包括类结构和思想,例如 NineOldAnimations 源码解析 NineoldAndroids动画库源码分析 上面两篇文章都比较详细的介绍了NineoldAndroids的源码,可以说为大家看源码带来很大的方便. 那为什么我还要写这篇文章呢? 我们来看Nin

android动画-tween动画实现原理

现有的 Android 动画框架是建立在 View 的级别上的,在 View 类中有一个接口 startAnimation 来使动画开始,startAnimation 函数会将一个 Animation 类别的参数传给 View,这个 Animation 是用来指定我们使用的是哪种动画,现有的动画有平移,缩放,旋转以及 alpha 变换等.如果需要更复杂的效果,我们还可以将这些动画组合起来,这些在下面会讨论到. 要了解 Android 动画是如何画出来的,我们首先要了解 Android 的 Vie

Android动画原理-基础篇(认识View)

一.动画是什么 Animation is a dynamic medium in which images or objects are manipulated to appear as moving images. -来自维基百科 翻译:动画是动态的画面. 二.android中的动画 手机的屏幕是刷新的,正常情况下频率在60fps.也就是大约16ms界面会刷新一次. android所有的动画的原理都是在这16ms之间,改变了显示内容的区域,从而达到动画的效果. 因为android的可视控件的绘

android动画具体解释二 属性动画原理

property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值.要动画某个东西.你需指定对象的目标属性.比方位置,动画的持续时间.和改变的值的范围. 属性动画系统同意你指定下面动画属性: · Duration: 动画持续时间. 默认是300 ms. · Time interpolation: 你能够指定一个函数来定义怎样跟据当前的时间计算属性的值. ·

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

Android动画基础

Android动画主要有三种: 1> 视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置.大小.旋转.透明度).譬如,如果你有一个TextView对象,您可以移动.旋转.缩放.透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化. 补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性.可重用性. 2> Drawable动画其实就是Frame动画(帧动画),它允许你实现像播放幻灯片一样的效果,这种动画的实质其实是Dra

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

Android动画全解

在Android开发中经常会碰到动画,看到别的应用有很酷炫的应用时,总是想怎么去实现,但是每次都是发现感觉是知道怎么做的,实际做起来还是无从下手的感觉,究其原因还是 Android动画方面的知识不全面,这几天利用空闲时间研究了下Android动画知识,当作学习日记,大家也好有所借鉴. Android主要分三类动画:Tween Animation.Frame Animation.Property Animation. 其中Tween Animation.Frame Animation是在Andro

【转】android动画之Tween动画 (渐变、缩放、位移、旋转)

原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation