Android动画使用总结(待完善)

来源:互联网 发布:海信网络电视机 编辑:程序博客网 时间:2024/05/16 09:01
一、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://schemas.android.com/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
5、通过valueAnimation.setInterpolator()valueAnimation.setEvaluator()可以分别对插值器、估值器进行设置
插值器:根据时间的流逝的百分比来计算出当前属性值改变的百分比(真正影响动画的效果)
估值器:根据当前属性改变的百分比来计算改变后的属性值(有IntEvaluator、FloatEvaluetor、ArgbEvaluator分别针对整型属性、浮点型属性、Color属性)

注意:
1、view动画用在ViewGroup中可以控制子元素的出场效果,用在Activity中可以实现不同Activity之间的切换效果
2、属性动画最好用代码来实现,相对会比较简洁,另外很多时候一个属性的起始值是无法提前确定的,在xml文件中无法给出一个准确值
3、ValueAnimation属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法
4、属性动画中有一类无限循环的动画,需要在Activity退出时及时停止,objectAnimator.cancel();,否则会造成内存泄露
5、对于View动画可能会产生setVisibility(View.GONE)也无法隐藏的现象,这时候要先调用view.clearAnimation()

1 0
原创粉丝点击