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

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

2016-09-14 15:01 337 查看
一、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()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Animation 动画