zoukankan      html  css  js  c++  java
  • Android动画

    动画分为两类:

    补间动画(Tween)和帧动画(Frame),补间动画是又一帧经过透明度、旋转、位移等变化而来。而帧动画则是由一帧帧连接起来的。

    补间动画主要有一下几种类:

    AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation 

    AnimationSet 是前面几种补间动画的组合

    补间动画的应用:

    1定义:两种方式,一种是在XML文件里面定义,另一种是直接用代码创建

    ① 用XML文件定义

    <?xml version="1.0" encoding="utf-8"?>

    <translate xmlns:android="http://schemas.android.com/apk/res/android"

        android:duration="1000"

        android:fillAfter="true"

        android:fillEnabled="true"

        android:fromXDelta="0"

        android:fromYDelta="0"

        android:interpolator="@android:anim/linear_interpolator"

        android:repeatCount="2"

        android:repeatMode="reverse"

        android:toXDelta="100"

    android:toYDelta="200" />

     

    引用定义好的补间动画:

    TranslateAnimation ta = (TranslateAnimation) (AnimationUtils

    .loadAnimation(Activity1.this,

    R.anim.anim1_1));

    //iv是一个ImageView对象

    iv.setAnimation(ta);

    ta.start();

    ② 直接用代码创建:

    // 起始x坐标,结束x坐标,起始y坐标,结束y坐标

    TranslateAnimation ta = new TranslateAnimation(0f,

    -100f, 0f, 200f);

    ta.setDuration(2000);// 设置动画持续时间

    ta.setRepeatMode(Animation.REVERSE);// 设置动画的重播模式

    ta.setRepeatCount(2);// 设置动画的重播次数

    ta.setFillEnabled(true);// 设置动画的填充模式,动画播放结束后停留的位置

    ta.setFillAfter(true);// 设置动画播放结束后停留在结束位置

    ta.setInterpolator(Activity_main.allInterpolator[0]);// 设置动画的播放速度

    iv.setAnimation(ta);

    ta.start();

    动画播放速度效果主要有一下类型:

    Interpolator[] allInterpolator = new Interpolator[] {

    new AccelerateInterpolator(), // 0越来越快

    new DecelerateInterpolator(),// 1越来越慢

    new AccelerateDecelerateInterpolator(),// 2先快后慢

    new AnticipateInterpolator(),// 3先后退一小步然后向前加速

    new OvershootInterpolator(),// 4快速到达终点超出一小步然后回到终点

    new BounceInterpolator(),// 5到达终点产生弹球效果,弹几下再回来

    new LinearInterpolator() // 6均匀速度

    };

    其它几种类型的补间动画和上述一种差不多,介绍一下AnimationSet这类混合的补间动画

    ①XML文件定义:

    <?xml version="1.0" encoding="utf-8"?>

    <set xmlns:android="http://schemas.android.com/apk/res/android"

        android:interpolator="@android:anim/accelerate_interpolator"

        android:shareInterpolator="true" >

     

        <scale

            android:duration="2000"

            android:fromXScale="0"

            android:fromYScale="0"

            android:pivotX="50%"

            android:pivotY="50%"

            android:toXScale="1.0"

            android:toYScale="1.0" />

     

        <alpha

            android:duration="2000"

            android:fromAlpha="0"

            android:toAlpha="1.0" />

     

        <rotate

            android:duration="2000"

            android:fromDegrees="0"

            android:pivotX="50%"

            android:pivotY="50%"

            android:toDegrees="360" />

     

    </set>

    ② 代码生成:

    RotateAnimation ta = new RotateAnimation(0f, 2160f,

    50f, 50f);

    ta.setDuration(2000);

    ScaleAnimation sa = new ScaleAnimation(0f, 4f, 0f,

    4f, 50f, 50f);

    sa.setDuration(2000);

    AlphaAnimation aa = new AlphaAnimation(0f, 1f);

    aa.setDuration(2000);

    // AnimationSet 里面的 动画是否统一使用

    // AnimationSet的Interpolator

    AnimationSet as = new AnimationSet(true);

    as.setInterpolator(Activity_main.allInterpolator[5]);

    as.setFillEnabled(true);

    as.setFillAfter(true);

    as.setDuration(2000);

    as.addAnimation(ta);

    as.addAnimation(sa);

    as.addAnimation(aa);

    iv.setAnimation(as);

    as.start();

    帧动画:

    XML定义

    <?xml version="1.0" encoding="utf-8"?>

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"

        android:oneshot="true" >

     

        <item

            android:drawable="@drawable/a1"

            android:duration="80"/>

       

        <item

            android:drawable="@drawable/a3"

            android:duration="80"/>

        <item

            android:drawable="@drawable/a4"

            android:duration="80"/>

        <item

            android:drawable="@drawable/a5"

            android:duration="80"/>

        

    </animation-list>

    帧动画的播放:

    AnimationDrawable ad;

     

    // 从xml获得一个帧动画

    ad = (AnimationDrawable) getResources().getDrawable(

    R.drawable.drawable_anim);

    // 设置是否不重复播放

    ad.setOneShot(true);

    // 设置控件的背景drawable

    iv.setBackgroundDrawable(ad);

    // 启动动画

    ad.start();

    设置Activity启动时候的动画

    startActivity(new Intent(Activity_main.this, Activity1.class));

    //这一句话一定要紧随其后

    overridePendingTransition(R.anim.anim1_0, R.anim.anim1_0);

  • 相关阅读:
    MATLAB中的SFunction的用法(C语言)
    OpenGL中的转换矩阵
    MATLAB读取和写入Excel文件
    一阶微分方程的求解
    三对角矩阵(Tridiagonal Matrices)的求法:Thomas Algorithm(TDMA)
    CarSim与Simulink联合仿真
    三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)
    在Simulink中创建库
    轮胎的魔术公式(Magic Fomula)模型
    C#中的编译时的类型与运行时的类型
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/4865152.html
Copyright © 2011-2022 走看看