您的位置:首页 > 移动开发 > Android开发

【Android】学习笔记(11)——Animation使用方法(上)

2011-09-02 14:40 726 查看
Andriod 的Animations可以从形式上分为两大类,分别是 Tweened Animations 和Frame-By-Frame Animations。Tweened Animations可以理解为补间动画,也就是某一张图或者其他对象,进行旋转、变形等动画;而Frame-By-Frame Animations是多张图片或对象,进行一帧一帧的变化。简单而也,前者是本身改变的动画,后者是与其他内容的交替显示形成的动画。

Tweened Animations有4种样式,分别为Alpha,Rotate,Translate,Scale。分别表示渐变,旋转,位移,缩放。要实现以上4种动画,必须要给出每种动画的需要参数。
Alpha:因为是渐变,所以需要给出改变之前的透明度,改变之后的透明度,总共改变的时间。
Rotate:旋转,必定要知道旋转的圆心在哪边,所以要定义圆心的X与Y轴,以及转动的时间,转动的角度等。
Translate:位移,即要知道原来对象的XY轴和改变后的XY轴,以及运动的时间等。
Scale:缩放,首先要知道XY轴缩放的比率,以及缩放前后中心坐标的变化,当然还有缩放的时间。
使用Animation还需要知道一些知识点:
Interpolator它定义了动画的速率,它有若干子类,AccelerateDecelerateInterpolator是两头慢,中间快的动画效果, AccelerateInterpolator是加速的动画效果,DecelerateInterpolator是减速动画效果, LinearInterpolator是匀速动画效果,等等。这些加速效果可以根据实际的需求来使用。
AnimationSet:它是Animation的一个集合,可以将定义好的各个动画,放入AnimationSet集合中,然后再进行对集合的设置,控制集合内的动画如何运行。
Tweened Animations的实现
Tweened Animations实现有两种方式,一种为在Java代码中设置,另一种为在XML文件中设置。两种方式各有优劣,下面一一介绍。
Tweened Animations的第一种实现:
我们的例子是Activity上有4个按钮和一张图片,4个按钮分别代表上面的四种动画效果。
布局文件很简单,就是4个按钮和一张图片的定义设置,在此略去,附件中可见详情。
在Java代码中,我们为每个按钮绑定了监听器。
Alpha监听器:
class AlphaOnClickListener implements OnClickListener{

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

AnimationSet animationSet = new AnimationSet(true);//创建一个Animation的集合,这里构造函数的参数是个boolean值,他表示的是这个AnimationSet中是否共享一个Interpolator,也就是在这个集合内不同的动画是否以同样地速率变化,如果为false,那么下面需要对每一个动画进行Interpolator的设置。

AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);//设置从不透明到透明,这里两个参数的取值为0~1,0表示完全透明,1表示完全不透明

alphaAnimation.setDuration(2000);//设置动画的时间为2秒

animationSet.addAnimation(alphaAnimation);//将创建的alphaAnimation加入Animation集合中

item.startAnimation(animationSet);//在ImageView上设置动画

}

}

Rotate监听器:
class RotateOnClickListener implements OnClickListener{

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

AnimationSet animationSet = new AnimationSet(true);//同上

RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

//RotateAnimation有6个参数

//1.初始的角度

//2.旋转的角度,可以为负的,即为逆时针转

//3.转的圆心的X坐标是相对谁为参照物的,这里有3种情况:RELATIVE_TO_SELF,RELATIVE_TO_PARENT,ABSOLUTE,分别是相对自己,相对父控件,绝对位置

//4.具体的X坐标,与第三个参数有关,若第3个参数是Animation.RELATIVE_TO_SELF,第四个参数是0.5f,那么圆心的X坐标就是自身控件宽度的0.5倍

//5.转的圆心的Y坐标是相对谁为参照物,参数同3

//6. 具体的Y坐标,与第三个参数有关,若第3个参数是Animation.RELATIVE_TO_SELF,第四个参数是0.5f,那么圆心的Y坐标就是自身控件宽度的0.5倍

rotateAnimation.setDuration(2000);//设置动画的时间

animationSet.addAnimation(rotateAnimation);//将创建的alphaAnimation加入Animation集合中

item.startAnimation(animationSet);//在ImageView上设置动画

}

}

Translate监听器:[align=left][/align]
class TranslateOnClickListener implements OnClickListener{

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

AnimationSet animationSet = new AnimationSet(true);//创建一个Animation的集合

TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1f);

//第1,2个参数是变化之前的X坐标

//第3,4个参数是变化之后的X坐标

//第5,6个参数是变化之前的Y坐标

//第7,8个参数是变化之后的Y坐标

translateAnimation.setDuration(2000);//设置动画的时间

animationSet.addAnimation(translateAnimation);//将创建的alphaAnimation加入Animation集合中

item.startAnimation(animationSet);//在ImageView上设置动画

}

}

Scale监听器:[align=left][/align]
class ScaleOnClickListener implements OnClickListener{

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

AnimationSet animationSet = new AnimationSet(true);//同上

ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f,1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

//第1个参数是X的原始比率,第2个参数是X变化后的比率

//第3个参数是Y的原始比率,第4个参数是Y变化后的比率

//第5,6个参数是最后动画结束时的X轴坐标

//第7,8个参数是最后动画结束时的Y轴坐标

scaleAnimation.setDuration(2000);//设置动画的时间

animationSet.addAnimation(scaleAnimation);//将创建的alphaAnimation加入Animation集合中

item.startAnimation(animationSet);//在ImageView上设置动画

}

}

以上是Tweened Animations的基本使用,当然还有其他的设置,比如设置延迟动画可以使用对Animation或AnimationSet设置setStartOffset(long time)等。

Tweened Animations的第二种实现:
使用XML文件来对动画进行定义和设置,首先要在res目录下建立anim文件夹,在这个文件夹下面就放置一个我们定义的XML文件,而且,每个XML文件都是以如下为标签:
<?xmlversion="1.0"encoding="UTF-8"?>

<setxmlns:android="http://schemas.android.com/apk/res/android"

android:interpolator="@android:anim/accelerate_interpolator"

>

</set>

我们将要定义的动画放在set标签中,里面的android:interpolator属性就是定义了这个set中的动画是以什么速率进行变化的,它的值是android自带的,可以再Android API中查到。
看一下上述4中动画的定义:
[align=left][/align]
<alpha

android:fromAlpha="1.0"//初始透明度

android:toAlpha="0.0"//结束透明度

android:duration="3000"//时长

></alpha>

<rotate

android:fromDegrees="0"//初始旋转角度

android:toDegrees="-360"//结束旋转角度,可为负,即逆时针

android:duration="3000"//时长

android:pivotX="50%" //下方介绍

android:pivotY="50%"//下方介绍

></rotate>

<scale

android:fromXScale="1.0"//初始X坐标比率

android:toXScale="0.1"//结束X坐标比率

android:fromYScale="1.0"//初始Y坐标比率

android:toYScale="0.1"//结束Y坐标比率

android:pivotX="50%"//下方介绍

android:pivotY="50%"//下方介绍

android:duration="3000"//时长

></scale>

<translate

android:fromXDelta="0%"//下方介绍

android:toXDelta="50%"//下方介绍

android:fromYDelta="0%"//下方介绍

android:toYDelta="100%"//下方介绍

android:duration="3000"//时长

></translate>

我们在上面代码标注“下方介绍”的这些值,我们有三种写法,如:50,50%,50%p。这三种写法就分别代表了ABSOLUTE,RELATIVE_TO_SELF和RELATIVE_TO_PARENT。
定义完XML文件后,我们就要在Java代码中对其使用了。
举例,若将上面的Alpha的XML文件命名为alpha.xml,则如此使用:
class AlphaOnClickListener implements OnClickListener{

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

Animation alphaAnimation = AnimationUtils.loadAnimation(AnimationDemo2Activity.this, R.anim.alpha);//载入alpha.xml

item.startAnimation(alphaAnimation);//在ImageView上设置动画

}

}

也可以将多个效果放在一个文件中的一个set内,那么这几个动画会根据自己的设置一起运行,达到对同一个对象的多种效果的叠加效果。
以上是Tweened Animations的两种基本用法,Animation的使用远远不止这些,需要进一步的学习哇。

附件是Tweened Animations的两种基本用法的示例代码,仅供参考。

如果我的文章给与了你帮助,就不妨请我喝杯咖啡吧,点击->

本文出自 “战神殿” 博客,请务必保留此出处http://theron.blog.51cto.com/2383825/656385
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐