动画是移动开发中不可或缺的一部分,要想让用户有不一样的App体验,难么就为你的App加上动画吧!
Android中动画主要分为三种:View动画,图片动画(Frame动画,也叫帧动画),属性动画。
- View动画:View动画支持四种动画效果,分别是位移,旋转,缩放和透明度动画。
- 帧动画:透过顺序播放一系列的图片从而产生的动画。
- 属性动画:API11的新特性,可以对任何Object做的动画。
本篇主要学习View动画和帧动画。
1.1 View动画的创建
创建View动画需要在res/目录下新建anim目录,如下所示:
右键点击res目录:
右键点击anim目录>New>Animation resource file,输入文件名字,确定,至此一个空的View动画的xml文件已经创建完成,接下来是时候开始撸代码!
1.2 View动画XML语法
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true">
<translate
android:fromXDelta="float"
android:fromYDelta="float"
android:toXDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:pivotX="float"
android:pivotY="float"
android:toDegrees="float" />
<scale
android:fromXScale="float"
android:fromYScale="float"
android:pivotY="float"
android:pivotX="float"
android:toXScale="float"
android:toYScale="float"/>
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<set>
<!--这里还可以添加另一个动画的集合-->
</set>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--单独一个动画的写法-->
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="3000"
android:fromXDelta="float"
android:fromYDelta="float"
android:toXDelta="float"
android:toYDelta="float"/>
上边的代码写的是一个动画的集合,set标签表示动画的集合,他可以包含若干个动画。这里的set标签中包含了两个属性 interpolator和shareInterpolator,其中interpolator含义为动画所采用的插值器,插值器将影响动画的速度,这里所用的@android:anim/decelerate_interpolator 意思就是减速插值器。Android内置了很多种插值器的实现,需要的同学去搜一下,这里不一一阐述了,shareInterpolator表示集合中的动画是否和集合共享同一个插值器。如果集合没有指定插值器,则子动画就需要单独指定插值器或者使用默认值。
下边则是单独动画的常用写法。
其中,子标签中属性含义如下:
- android:fromXDelta 表示x坐标的起始值,可填有一下几种,整形,浮点型,或100%(表示自身的100%,也就是从View自己的位置开始),50%p(表示父层View的50%,是以它父层View为参照的)
- android:fromYDelta 表示y坐标的起始值,填值同上
- android:toXDelta 表示x坐标的起始值,填值同上
- android:toYDelta 表示y坐标的起始值,填值同上
- fromXScale,fromYScale 分别表示水平和竖直方向上的起始值,0.0为不显示,1.0为正常大小,具体指根据自己的需要填写。
- toXScale,toYScale 分别表示水平和竖直方向上的结束值。
- privotX,privotY 分别表示轴点的x,y坐标,有关轴点的含义在下方会进行讲解。
- fromDegrees,toDegrees 分别表示旋转开始和结束的角度,可填值如0,180等
- fromAlpha,toAlpha 分别表示透明度的起始和结束的值,透明度的取值范围为0.0~1.0
- android:duration 表示动画的持续时间,可填值如2000 表示此动画持续2s
android:fillAfter 动画结束以后View是否停留在结束位置,true表示停留,false表示不停留。
在 scale 动画和 rotate 动画中我们提到了轴点的概念,轴点我们怎么理解呢,打个比方,在缩放动画中默认轴点为View的中心,也就是说进行缩放动画时,View会向左右两边同时进行缩放,如果设置了轴点为View的左边界,那么缩放动画就会只向右边界缩放。同理,旋转动画的轴点默认为中心位置。 对于轴点对动画的影响还是建议大家取不同的值多试一试。
1.3 View动画的使用
在需要使用的地方:
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_animation);
view.startAnimation(animation);
2 帧动画
首先我们需要通过XML来定义一个AnimationDrawable,创建的步骤是右键点击drawable目录>new>drawable resource file 输入文件名确认,xml代码示例如下所示:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/a" android:duration="200"/>
<item android:drawable="@mipmap/c" android:duration="200"/>
<item android:drawable="@mipmap/e" android:duration="200"/>
<item android:drawable="@mipmap/g" android:duration="200"/>
<item android:drawable="@mipmap/i" android:duration="200"/>
<item android:drawable="@mipmap/k" android:duration="200"/>
<item android:drawable="@mipmap/m" android:duration="200"/>
<item android:drawable="@mipmap/o" android:duration="200"/>
<item android:drawable="@mipmap/q" android:duration="200"/>
</animation-list>
然后将上述的Drawable作为View的背景并通过Drawable来播放动画即可:
imageView.setBackgroundResource(R.drawable.charge__bg);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
animationDrawable.start();
帧动画的使用就这么简单,但是比较容易引起OOM,所以在使用的时候尽量避免使用尺寸较大的图片。
以上就是View动画和帧动画的学习总结,下一篇我会学习总结属性动画的有关知识