欢迎来到天天文库
浏览记录
ID:15003224
大小:44.00 KB
页数:3页
时间:2018-07-31
《android画图学习总结(四)——animation(下 )》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android画图学习总结(四)——Animation(中)By:海市蜃楼
2、In:Android开发在Android画图学习总结(四)——Animation(上)中详细介绍了TweenAnimation的定义、使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方面补充说明上一篇幅遗漏的问题,帮助大家更好的理解TweenAnimation。对TweenAnimation的本质做个总结:TweenAnimation通过对View的内容完成一系列的图形变换(包括平移、缩放、旋转、改变透明度)来实现
3、动画效果。具体来讲,预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。这些指令可以是以XML文件方式定义,也可以是以源代码方式定义。程序沿着时间线执行这些指令就可以实现动画效果。在这里,我们需要对2个问题进行深入的解析:·动画的运行时如何控制的?·动画的运行模式。动画的运行时如何控制的?这个问题,我们也就也就是上一篇幅中提到的TweenAnimation,估计大家对什么是Interpolator、到底有什么作用,还是一头雾水,在这里做个详细的说明。按照AndroidSDK中对interpolator的说明:i
4、nterpolator定义一个动画的变化率(therateofchange)。这使得基本的动画效果(alpha,scale,translate,rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用Interpolator控制。Interpolator定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator是基类,封装了所有Interpolator的共同方法,它只有一个方法,即getInterpolation(floatinput),该方法mapsapointonth
5、etimelinetoamultipliertobeappliedtothetransformationsofananimation。Android提供了几个Interpolator子类,实现了不同的速度曲线,如下:AccelerateDecelerateInterpolator在动画开始与介绍的地方速率改变比较慢,在中间的时候加速AccelerateInterpolator在动画开始的地方速率改变比较慢,然后开始加速CycleInterpolator动画循环播放特定的次数,速率改变沿着正弦曲线DecelerateInterp
6、olator在动画开始的地方速率改变比较慢,然后开始减速LinearInterpolator在动画的以均匀的速率改变对于LinearInterpolator,变化率是个常数,即f(x)=x.publicfloatgetInterpolation(floatinput){returninput;}Interpolator其他的几个子类,也都是按照特定的算法,实现了对变化率。还可以定义自己的Interpolator子类,实现抛物线、自由落体等物理效果。动画的运行模式动画的运行模式有两种:·独占模式,即程序主线程进入一个循环,根据动
7、画指令不断刷新屏幕,直到动画结束;·中断模式,即有单独一个线程对时间计数,每隔一定的时间向主线程发通知,主线程接到通知后更新屏幕;额外补充说明:Transformation类Transformation记录了仿射矩阵Matrix,动画每触发一次,会对原来的矩阵做一次运算,View的Bitmap与这个矩阵相乘就可实现相应的操作(旋转、平移、缩放等)。Transformation类封装了矩阵和alpha值,它有两个重要的成员,一是mMatrix,二是mAlpha。Transformation类图如下所示:总结说明图形变换通过仿射矩
8、阵实现。图形变换是图形学中的基本知识,简单来说就是,每种变换都是一次矩阵运算。在Android中,Canvas类中包含当前矩阵,当调用Canvas.drawBitmap(bmp,x,y,Paint)绘制时,Android会先把bmp做一次矩阵运算,然后将运算的结果显示在Canvas上。这样,编程人员只需不断修改Canvas的矩阵并刷新屏幕,View里的对象就会不停的做图形变换,动画就形成了。
此文档下载收益归作者所有