Android动画入门

Android动画

1.view动画

标签对应TransitionAnimation
标签对应ScaleAnimation
标签对应RotateAnimation
标签对应AlphaAnimation
标签对应SetAnimation

android:interpolator//插值器
android:shareInterpolator//集合中动画是否和集合共享一个插值器
Animation animation=AnimationUtils.loadAnimation(this,R.anim.anim_test);
mButton.startAnimation(animation)

1.自定义view动画

继承抽象类Animation。重写initialize和applyTransformation方法,initialize方法中做初始化工作,在applyTransformation中进行相应的矩阵变换。有时通过Camera来简化居中变换的过程。

2.帧动画

一组定义好的图片,顺序播放。AnimationDrawable来使用帧动画。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" >

    <item  android:drawable="@drawable/dialog01" android:duration="200"/>
    <item  android:drawable="@drawable/dialog02" android:duration="200"/>
    <item  android:drawable="@drawable/dialog03" android:duration="200"/>

</animation-list>

android:oneshot
是否只执行一次。

AnimationDrawable drawable=(AnimationDrawable)mButton.getBackground();
drawable.start();

3.LayoutAnimation

作用于ViewGroup,当它的子元素出场都会具有这种动画效果。常常用作ListView。
下边是动画anim_layout:

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:animation="@anim/anim_item" android:animationOrder="normal" android:delay="0.5" >

</layoutAnimation>

android:delay
开始动画的延迟时间。
android:animationOrder
动画顺序,normal,reverse,random,分别表示顺序显示,逆向显示,随机播放。
android:animation
指定具体的入场动画。

<ListView  android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/anim_layout" >
</ListView>

代码中实现:

ListView listview=(ListView)findViewById(R.id.listview);
        Animation animation=AnimationUtils.loadAnimation(this, R.anim.anim_item);
        LayoutAnimationController controller = new LayoutAnimationController(animation);
        controller.setDelay(0.5f);
        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listview.setLayoutAnimation(controller);

4.Activity的切换效果

overridePendingTransition(int enterAnim,int exitAnimation)这个方法,必须在startAcitivity()或者finish()之后调用才有效。

Fragment也可以添加切换动画。通过FragmentTransition中的setCustionAnimations()方法来添加切换动画。

2.属性动画

API 11新加入特性。有ValueAnimator、ObjectAnimator、AnimatorSet等概念。兼容11以下版本采用nineoldandroids,网址http:nineoldandroids.com.

1.使用

(1)改变一个对象的translationY属性。

ObjectAnimator.ofFloat(mObject,"translationY",-mObject.getHeight()).start();

(2)改变对象的背景色属性。3秒从0xFFFF8080到0xFF8080FF的渐变。无限循环加反转效果。

ValueAnimator colorAnim=ObjectAnimator.ofInt(this,"backgroundColor",0xFFFF8080,0xFF8080FF);
colorAnim.setDuration(3000);
colorAnim.setEvaluator(new ArgbEvauator());
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setRepeatMode(ValueAnimator.REVERSE);
colorAnim.start();

(3)动画集合,5秒对view的旋转,评议,缩放,透明都进行改变。

AnimatorSet set = new AnimatorSet();
        set.playTogether(ObjectAnimator.ofFloat(myView, "ratationX", 0, 360),
                ObjectAnimator.ofFloat(myView, "ratationY", 0, 180),
                ObjectAnimator.ofFloat(myView, "ratation", 0, -90),
                ObjectAnimator.ofFloat(myView, "translationX", 0, 90),
                ObjectAnimator.ofFloat(myView, "translationY", 0, 90),
                ObjectAnimator.ofFloat(myView, "scaleX", 0, 1.5f),
                ObjectAnimator.ofFloat(myView, "scaleY", 0, 0.5f),
                ObjectAnimator.ofFloat(myView, "alpha", 0, 0.25f, 1));
        set.setDuration(5*1000).start();

还可以通过XML来定义,属性动画定义在res/animator/目录下。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together" >

    <objectAnimator  android:duration="300" android:propertyName="x" android:valueTo="200" android:valueType="intType" />

    <animator  android:duration="300" android:valueTo="200" android:valueType="intType" />

</set>

android:propertyName
属性动画的作用对象的属性的名称。
startOffset
动画的延迟时间。
valueType
android:propertyName所指定的属性的类型,有intType和floatType两个选线。如果android:propertyName指定的是颜色,不需要指定valueType,系统自动处理。

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.set_anim);
        set.setTarget(mButton);
        set.start();

2.插值器和估值器

TimeInterpolator
时间插值器,根据时间流逝的百分比计算出当前属性值改变的百分比。系统预置的有LinearInterpolator(线性插值器:匀速动画)、AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)和DecelerateInterpolator(加速插值器:动画越来越慢)等。
TypeEvaluator
类型估值算法,根据当前属性改变的百分比计算改变后的属性值,系统预置有IntEvaluator(针对整形属性)、FloatEvaluator(针对浮点型属性)和ArgbEvaluator(针对color属性)。

3.监听器

AnimatorListener定义如下:

public static interface AnimatorListener{
            void onAnimationStart(Animator animation);
            void onAnimationEnd(Animator animation);
            void onAnimationCancel(Animator animation);
            void onAnimationRepeat(Animator animation);
    }

AnimatorUpdateListener定义:

public static interface AnimatorUpdateListener{
            void onAnimationUpdate(ValueAnimator animation);
    }

你可能感兴趣的:(android,动画)