一、细说Animation五大基本动画

来源:互联网 发布:淘宝质检报告 编辑:程序博客网 时间:2024/06/06 04:58

在Android动画中,共有两种动画:View Animation(视图动画)和Property Animator(属性动画);
其中:
• View Animation包括Tween Animation(补间动画)和Frame Animation(帧动画);
• Property Animator包括ValueAnimator和ObjectAnimation;

首先,直观上,他们有如下三点不同:

1、引入时间不同:View Animation是API Level 1就引入的。Property Animation是API Level 11引入的,即Android 3.0才开始有Property Animation相关的API。 2、所在包名不同:View Animation在包android.view.animation中。而Property Animation API在包android.animation中。3、动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator中动画类的取名则叫XXXXAnimator

我们先说View Animation(视图动画)中的Tween Animation(补间动画)

 Scale:缩放
xml代码:

<scale xmlns:android="http://schemas.android.com/apk/res/android"       android:fromXScale="1.0"       android:fromYScale="1.0"       android:toXScale="2"       android:toYScale="2"       android:pivotX="50%p"       android:pivotY="50%p"       android:duration="2000"       android:fillAfter="false"       android:repeatCount="2"       android:repeatMode="reverse"></scale>

Java代码:

ImageView ivScale = (ImageView) findViewById(R.id.ivScale);Animation mAnimationScale = AnimationUtils.loadAnimation(this, R.anim.scale);//缩放ivScale.startAnimation(mAnimationScale);•   android:fromXScale=”value”:在缩放开始的那一刹那,X方向相对于原始状态的大小;表示缩放开始的那一刹那,以原始画面value倍大小开始缩放;是float型。例如某ImageView的宽度为200px,value为1.2,则表示缩放初始的刹那,ImageView的宽度为200*1.2=240px。•   android:toXScale=”value”:在缩放结束的一刹那,X方向相对于原始状态的大小;是float型。例如某ImageView的宽度为200px,value为3.0;则表示缩放结束的刹那,ImageView的宽度为200*3=600px•   android:fromYScale:理解同fromXScale。•   android:toYScale:理解同toXScale。•   android:pivotX=”value”:X方向的缩放坐标,可以是数值value、百分数value%、百分数value%p三种样式,比如50、50%、50%p。50表示以目标控件的左上角为原点,X方向坐标为50px为基准开始缩放;50%表示以缩放控件的左上角为原点,X方向坐标为自身宽度的50%为基准开始缩放;50%p表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。•   android:pivotY:理解同android:pivotX。•   android:duration="value":表示整个缩放过程经历的时间,单位是毫秒(ms)。•   android:fillAfter:值为boolean值, 为true,动画结束时,将保持动画缩放结束的刹那得大小,即上面绿底红字加粗的200*3=600px的大小。为false,则是恢复至原始大小。•   android:fillBefore作用与fillAfter相同。一般二者用一个即可。•   android:repeatCount值为int型,表示动画 重复次数(大于1)•   android:repeatMode重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示正序动画,必须与repeatCount一起使用才能看到效果动画缩放过程:从初始状态fromX/YScale,以(pivotX/Y)为基准点,经过duration时间,缩放至toX/YScale,可反复执行repeatCount次,最后根据fillAfter确定是保持对象的原始状态还是缩放过后的状态。

 Alpha:透明度
xml代码:

<alpha xmlns:android="http://schemas.android.com/apk/res/android"       android:duration="2500"       android:fillBefore="false"       android:fromAlpha="1.0"       android:repeatCount="1"       android:repeatMode="reverse"       android:toAlpha="0"></alpha>

Java代码:

Animation mAnimationAlpha = AnimationUtils.loadAnimation(this, R.anim.myalpha);//透明度ivScale.startAnimation(mAnimationAlpha);•   android:fromAlpha   动画起始透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明•   android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明   动画透明度过程:从初始状态fromAlpha,在duration时间内,按照repeatMode顺序过渡到toAlpha,总共执行repeatCount次,执行完后根据fillBefore判断是保持原始状态还是最终状态。

 Rotate:旋转
xml代码:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromDegrees ="0"    android:toDegrees="720"    android:pivotX="50%"    android:pivotY="50%"    android:duration="2000"    android:fillAfter="true"    android:repeatMode="restart"    android:repeatCount="0"></rotate>   

Java代码:

mAnimationRotate = AnimationUtils.loadAnimation(this, R.anim.rotate);//旋转ivScale.startAnimation(mAnimationRotate);•   android:fromDegree   旋转动画起始角度,取值从0开始的任意int型;•   android:toDegree   旋转动画旋转的角度数,取值从0开始的任意int型,大于0表示顺时针旋转,小于0表示逆时针旋转;•   android:pivotx理解同scale的pivotx;              android:pivoty理解同scale的pivoty;•   android:duration理解同scale的duration;          android:fillAfter理解同scale的fillAfter;•   android:repeatMode理解同scale的repeatMode;•   android:repeatCount理解同scale的repeatCount;动画旋转过程:,从初始状态fromDegree,以以(pivotX/Y)为旋转中心,在duration时间范围内,按照repeatMode顺序过渡到toDegree ,总共执行repeatCount此,完成后根据fillAfter的状态确定是保持动画的原始状态还是动画最终状态。

 translate:移动/平移
xml代码:

    <translate xmlns:android="http://schemas.android.com/apk/res/android"        android:fromXDelta="0"        android:fromYDelta="0"        android:toXDelta="100"        android:toYDelta="100"        android:duration="2000"        android:fillAfter="true"></translate>

Java代码:

Animation mAnimationTranslate = AnimationUtils.loadAnimation(this, R.anim.translate);//移动ivScale.startAnimation(mAnimationTranslate);    •   android:fromXDelata  起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,理解同scale的pivotX•   android:toXDelata动画结束时,控件的X坐标;•   android:fromYDelata  起始点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,理解同scale的pivotY•   android:toYDelata动画结束时,控件的Y坐标;动画移动/平移过程:从初始状态fromX/YDelta在duration时间内移动到toX/YDelta位置,然后根据fillAfter的状态确定是保持动画的原始状态还是动画最终状态。

 set:几种集合的效果
xml代码:

<set xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="1500"    android:fillAfter="true"    android:repeatMode="restart"    android:repeatCount="2">    <alpha        android:fromAlpha="0.1"        android:toAlpha="1.0"/>     <rotate        android:fromDegrees="0"        android:toDegrees="540"        android:pivotX="50%"        android:pivotY="50%"/>      <scale        android:fromXScale="0"        android:fromYScale="0"        android:pivotY="50%"        android:pivotX="50%"        android:toXScale="1.25"        android:toYScale="1.25"/>       <translate        android:fromYDelta="0"        android:fromXDelta="0"        android:toXDelta="60"        android:toYDelta="60"/></set>

Java代码:

Animation mAnimationSet = AnimationUtils.loadAnimation(this, R.anim.set_animation);//综合ivScale.startAnimation(mAnimationSet);

View Animation(视图动画)中的Tween Animation(补间动画)到此讲解完毕

原创粉丝点击