一、view动画


1、指定关键帧,通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度),可以自定义


TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation四个Animation的子类分别对应平移、缩放、旋转、透明度四种动画


名称

标签

子类

效果

平移动画

<translate>

TranslateAnimation

移动view

缩放动画

<scale>

ScaleAnimation

放大、缩小

旋转动画

<rotate>

RotateAnimation

旋转view

透明度动画

<alpha>

AlphaAnimation

改变view的透明度


2、AnimationSet动画集合类对应标签<set>  </set>


android:interpoltor 指定插值器


android:shareInterpolator = ["true" | "false"] set中的动画是否共用 android:interpoltor指定的插值器


3、在res/anim中定义相应的view动画



二、帧动画(也属于view动画)


顺序播放一系列图像,可以理解为图片的切换(如果图片过多、过大就容易造成OOM)


由AnimationDrawable类控制,对应便签<animation-list>,如下(在drawable下创建):


<animation-listxmlns:android="http:///apk/res/android"
   android:oneshot="false">
    <itemandroid:drawable="@android:drawable/dark_header"android:duration="100"/>
    <itemandroid:drawable="@android:drawable/ic_menu_week"android:duration="200"/>
    <itemandroid:drawable="@android:drawable/edit_text"android:duration="100"/>
</animation-list>


当成drawable来用就行了



三、属性动画


1、通过动态地改变对象的属性达到动画的效果(API 11)


2、主要有ValueAnimation、ObjectAnimation、AnimatorSet三个比较常用的类


其中ObjectAnimation继承自ValueAnimation(ObjectAnimation多了一个对于View属性的定义)


3、属性动画的一般用法


ObjectAnimation:


objectAnimator . ofFloat (button , "translationY" , - button.getHeight()).start() ;


ValueAnimation(没有对View的属性进行设置):


ValueAnimator valueAnimator = ValueAnimator.ofInt(1,100);
valueAnimator.addUpdateListener(newAnimatorUpdateListener() {
   // 持有一个IntEvaluator对象,方便下面估值的时候使用
   privateIntEvaluatormEvaluator=newIntEvaluator();
   @Override
   public voidonAnimationUpdate(ValueAnimator animator) {
       // 获得当前动画的进度值,整型,1-100之间
       intcurrentValue = (Integer) animator.getAnimatedValue();
       Log.d(TAG,"current value: "+ currentValue);
       // 获得当前进度占整个动画过程的比例,浮点型,0-1之间
       floatfraction = animator.getAnimatedFraction();
       // 直接调用整型估值器通过比例计算出宽度,然后再设给Button
       target.getLayoutParams().width=mEvaluator.evaluate(fraction,start,end);
       target.requestLayout();
   }
});




4、也可以通过xml定义属性动画,在res/animator中定义相应的view动画


标签

对应的类

<set>

AnimatorSet

<animator>

ValueAnimation

<objectAnimator>

ObjectAnimation


valueAnimation.setInterpolator()、 valueAnimation.setEvaluator()可以分别对插值器、估值器进行设置


插值器:根据时间的流逝的百分比来计算出当前属性值改变的百分比(真正影响动画的效果)


估值器:根据当前属性改变的百分比来计算改变后的属性值(有IntEvaluator、FloatEvaluetor、ArgbEvaluator分别针对整型属性、浮点型属性、Color属性)



注意:


1、view动画用在ViewGroup中可以控制子元素的出场效果,用在Activity中可以实现不同Activity之间的切换效果


2、属性动画最好用代码来实现,相对会比较简洁,另外很多时候一个属性的起始值是无法提前确定的,在xml文件中无法给出一个准确值


3、ValueAnimation属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法


objectAnimator .cancel() ;,否则会造成内存泄露


5、对于View动画可能会产生setVisibility(View.GONE)也无法隐藏的现象,这时候要先调用view.clearAnimation()