在文章Android动画解析(一)—— Frame Animation(帧动画)中,我们学习了Android系统下Frame Animation。这节内容,我们就学习下Tween Animation的使用,Tween Animation有两种使用方式,一种是通过xml进行配置动画,另外一种就是通过代码进行创建动画。本节内容,我们讲解在xml文件中使用补间动画。
一、概述
Tween Animation在实际开发中占有很大的比重,使用也比较频繁,它由四种基本动画组成:alpha(渐变透明度)、scale(缩放)、translate(平移)、rotate(旋转)。同时,我们在开发中也可以将四种基本动画进行组合,形成动画集合进行使用。
基本使用
我们在res目录下穿件anim文件夹(res/anim),用于存放我们的动画文件。我们选择对应的动画节点创建我们的动画效果。
xml文件中标签名称 | 作用 |
---|---|
alpha | 渐变透明度动画 |
scale | 缩放动画 |
translate | 平移动画 |
rotate | 旋转动画 |
实例展示
二、使用讲解
Tween动画四个子类动画都是继承自Animation,所以它们具备Animation类的一些公共属性。
在进行讲解四种动画之前,先科普一些Android坐标系的知识。我从网上找了两张图,看懂就明白了。
这两张图,很明确的显示了Android动画中的坐标关系。
1、Translate动画的基本使用
(1)、自身属性配置
toYDelta:Y轴坐标的终点位置,同样有三种类型,同上。
(2)下面,我们就看做几个实例看下:
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="50" android:toXDelta="100" android:fromYDelta="0%" android:toYDelta="0%" android:duration="1000">
</translate>
在上面的平移动画中,我们让控件沿着50px运动到100px值的位置,根据我们上面的分析,以左上角的原点为基准,那么我们的动画效果如下图所示:
通过效果图,我们可以看到控件的动画起始位置为x=50px的位置,然后运动到100px位置。同时在上面的动画中,我们没有设置android:fillAfter属性,动画的效果执行完毕后自动恢复到初始位置,说明这个值默认为false,如果我们设置这个属性为true,即下面的动画文件:
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="50" android:toXDelta="100" android:fromYDelta="0%" android:toYDelta="0%" android:fillAfter="true" android:duration="1000">
</translate>
动画效果如下:
我们可以看到动画效果已经停留在最后一帧的画面。现在我们看下如果设置x和y的起点和终点,动画效果是怎么样的?
我们可以看到,控件会同时在x轴和y轴上进行运动,那么这里我给大家留下一个问题,怎么让控件进行曲线运动?好了!这里,我们就不实验百分比和百分比p的情况,大家可以自己实验下,我们在接下来的rotate动画中进行实验,效果比较明显。
2、Alpha动画的基本使用
(1)、自身属性配置
android:toAlpha:动画的结束透明度,在android中透明度从0.0f——1.0f这个区间范围,0.0f表示完全透明,1.0f表示完全不透明。
透明度动画很简单,自身的独特属性就是这两个,说的直白点,只要指定起始和终点透明度值就好了。其它的公共属性都是继承自Animation这个类。
(2)下面,我们就看做个实例看下:
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" android:fillAfter="true" android:repeatCount="1" android:repeatMode="restart" >
</alpha>
在上面的动画中,我们指定起始透明度为完全透明,终点透明度为不透明。动画的持续时间为2s,动画的重复次数为1次,动画的重复模式为从头开始。好了,看下效果图:
通过上面的动画,我们看到控件从“无”到“有”的一个过程,这个就是透明度动画,比较简单,与其他几个动画相比,不会被起始点的位置搞的晕头转向。
3、rotate动画的基本使用
(1)、自身属性配置
android:pivotY:动画的围绕旋转点的y坐标,默认为控件左上角y=0,同样可以设置三个雷丁的值,含义同上。
在我们实际的生活中,旋转的东西。肯定是有一个旋转基点,所以在旋转的时候我们同样需要指定旋转基点进行旋转。
(2)下面,我们就看做几个实例看下:
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="90" android:pivotX="0" android:pivotY="0" android:fillAfter="true" android:duration="3000" android:repeatMode="reverse" android:repeatCount="2" >
</rotate>
在上面的动画中,我们指定起始角度为0度,旋转到90度,旋转点为(0,0)。看下效果:
通过效果图,看到控件绕着左上角的(0,0)位置进行旋转。我们通过指定绝对值来指定旋绕中心的位置。下面我们指定百分比:
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="90" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" android:duration="3000" android:repeatMode="restart" android:repeatCount="2" >
</rotate>
通过效果可以看到,控件绕着自身的中心旋转,这个就是我们设置50%的效果,控件在原点基础上增加自身长度/高度的一半为旋转中心,从0度旋转到90度,同时我们指定重复的模式为从头开始。下面我们指定50%p看看效果:
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="90" android:pivotX="50%p" android:pivotY="50%p" android:fillAfter="true" android:duration="3000" android:repeatMode="restart" android:repeatCount="2" >
</rotate>
控件在自身原点加上父控件的一半作为旋转中心,进行旋转。其它的公共属性同上。
4、scale动画的基本使用
(1)、自身属性配置
(2)下面,我们就看做个实例看下:
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="1000" android:fillAfter="true">
</scale>
这个动画,我们设置x、y的起始比例为0,终止比例为原状1,即实现从无到有的过程,旋转中心点指定为控件自身中心。
至此,四种动画的基本使用我们已经学习完毕了。接下来就是组合动画了,组合动画就是通过这四种基本的动画进行组合而来。Android系统中给我们提供了set标签用于我们在xml文件中创建动画集合。
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1000"/>
<scale android:fromXScale="0" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:pivotX="50%" android:pivotY="50%" android:duration="1000" android:fillAfter="true"/>
</set>
在这个动画效果中,我们设置了一个边旋转边缩放的动画,效果图如下:
源码地址:https://github.com/dengshiwei/StudyTest
作者:mr_dsw 欢迎转载,与人分享是进步的源泉!
转载请保留地址:http://blog.csdn.net/mr_dsw