动画效果编程基础——Animation

一、Android动画类型

Androidanimation由四种类型组成

1XML

Alpha     渐变透明度动画效果

Scale      渐变尺寸伸缩动画效果

Translate   画面转换位置移动动画效果

Rotate     画面转移旋转动画效果

2JavaCode

AlphaAnimation 渐变透明度动画效果

ScaleAnimation 渐变尺寸伸缩动画效果

TranslateAnimation 画面转换位置移动动画效果

RotateAnimation 画面转移旋转动画效果

二、Android动画模式

Animation主要有两种动画模式

(1)tweened animation(渐变动画)

 XML中                        JavaCode

 Alpha                          AlphaAnimation

 Scale                           ScaleAnimation

(2)Frame by frame (画面转换动画)

 XML中                         JavaCode

 Translate                         TranslateAnimation

 Rotate                           RotateAnimation

三、如何在XML文件中定义动画

1、打开Eclipse,新建Android工程

2、res目录中新建anim文件夹

3、anim目录中新建一个myanim.xml(注意文件名小写)

加入XML的动画代码 

 

1)、anim_alpha.xml文件中

  

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

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

    <!-- 透明度控制动画效果alpha

         浮点型值:

         fromAlpha  动画起始时透明度

         toAlpha    动画结束时透明度

         说明:0.0  完全透明

         1.0  完全不透明

         以上值取0.0-1.0之间的 float数据类型的数字

         

       长整型:

       duration  为动画持续时间

       说明:时间以毫秒为单位

        -->

    <alpha android:fromAlpha="0.1"

           android:toAlpha="1.0"

           android:duration="3000"/>  

 

</set>

 

(2)anim_scale.xml文件中

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

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

    <!-- 尺寸伸缩动画效果 scale

    属性:interpolator 指定一个动画的插入器

                  有三种动画插入器:

                  accelerate_decelerate_interpolator  加速-减速 动画插入器

                  accelerate_interpolator 加速-动画插入器

                  decelerate_interpolator 减速-动画插入器

                 其他的属于特定的动画效果

                 

       浮点型值:

       fromXScale  动画起始时  X坐标上的伸缩尺寸

       toXScale  动画结束时 X坐标上的伸缩尺寸

       fromYScale  动画起始 Y时坐标上的伸缩尺寸

       toYScale  动画结束时 Y坐标上的尺寸

       说明:以上四种属性值

       0.0表示收缩到没有

       1.0表示正常无伸缩

                  值小于1.0表示收缩

                  值大于1.0表示放大

                  

       pivotX 动画相对于物件的X坐标的开始位置

       pivotY 动画相对于武将的Y坐标的开始位置

       说明:以上两个属性值 从0%-100%中取值

       

       长整型:

       duration 动画持续时间

       说明:时间以毫秒为单位

       

       布尔型值:

       fillAfter 当设置为true,该动画转化在动画结束后被应用

     -->

    <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"

           android:fromXScale="0.0"

           android:toXScale="1.4"

           android:fromYScale="0.0"

           android:toYScale="1.4"

           android:pivotX="50%"

           android:pivotY="50%"

           android:fillAfter="false"

           android:duration="700"/>

 

</set>

 

(3)anim_translate.xml文件中

 

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

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

    <!-- translate 位置转移动画效果

          整型值:fromXDelta 动画起始时 X坐标上的位置 

           toXDelta 动画结束时 X坐标上的位置

            fromYDelta 动画起始时 Y坐标上的位置

            toYDlta 动画结束时 Y坐标上的位置

            注意:没有指定fromXTra toXType fromYType toYType 时候,默认是以自己为相对参照物

            

            长整型:duration 为动画持续时间

                                时间以毫秒为单位-->

    

    <translate android:fromXDelta="30"

               android:toXDelta="-80"

               android:fromYDelta="30"

               android:toYDelta="300"

               android:duration="2000"/>

    

 

</set>

4)、anim_rotate.xml文件中

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

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

    <!-- rotate旋转动画效果

         属性:interpolator 指定一个动画的插入器

         有三种动画插入器:

                  accelerate_decelerate_interpolator  加速-减速 动画插入器

                  accelerate_interpolator 加速-动画插入器

                  decelerate_interpolator 减速-动画插入器

                 其他的属于特定的动画效果

                 

                 浮点整型值:

                 fromDegrees 为动画起始时物件的角度

                 toDegrees 为动画起始时物件旋转的角度 可以大于360度

                 说明:当角度为负数——表示逆时针旋转

                                当角度为正数——表示顺时针旋转

                                (负数from——to正数:顺时针旋转

                                     负数from——to负数:逆时针旋转

                                     正数from——to正数:顺时针旋转)

      

      pivotX 为动画相对于物件的X坐标的开始位置

      pivotY 为动画相对于物件的Y坐标的开始位置

      说明:以上两个属性值 从0%——100%中取值

        50%为物件的X或Y方向坐标上的中点位置

        

      长整型类型:

      duration  为动画持续时间

      说明:时间以毫秒为单位

          -->

    <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"

            android:fromDegrees="0"

            android:toDegrees="+350"

            android:pivotX="50%"

            android:pivotY="50%"

            android:duration="3000"/>

 

</set>

 

四、Java代码中

(1)、在main.xml文件中定义四个按钮

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

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="alpha" />

 

    <Button

        android:id="@+id/button2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="scale" />

 

    <Button

        android:id="@+id/button3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="translate" />

 

    <Button

        android:id="@+id/button4"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="rotate" />

 

</LinearLayout>

 

(2)、在src代码中

private Button btn_alpha;

private Button btn_scale;

private Button btn_translate;

private Button btn_rotate;

 

//在代码中定义 动画实例对象

private Animation myAnimation_Alpha;

private Animation myAnimation_Scale;

private Animation myAnimation_Translate;

private Animation myAnimation_Rotate;   

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        btn_alpha = (Button)findViewById(R.id.button1);

        btn_scale = (Button)findViewById(R.id.button2);

        btn_translate = (Button)findViewById(R.id.button3);

        btn_rotate = (Button)findViewById(R.id.button4);

        btn_alpha.setOnClickListener(this);

        btn_scale.setOnClickListener(this);

        btn_translate.setOnClickListener(this);

        btn_rotate.setOnClickListener(this);

    }  

 

@Override

public void onClick(View v) { 

switch (v.getId()) {

case R.id.button1:

//myAnimation_Alpha = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_alpha);

myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f);

myAnimation_Alpha.setDuration(5000);

btn_alpha.startAnimation(myAnimation_Alpha);

break;

case R.id.button2:

//myAnimation_Scale = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_scale);

myAnimation_Scale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

myAnimation_Scale.setDuration(3000);

btn_scale.startAnimation(myAnimation_Scale);

break;

case R.id.button3:

//myAnimation_Translate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_translate);

myAnimation_Translate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

myAnimation_Translate.setDuration(5000);

btn_translate.startAnimation(myAnimation_Translate);

break;

case R.id.button4:

//myAnimation_Rotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_rotate);

myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

myAnimation_Rotate.setDuration(6000);

btn_rotate.startAnimation(myAnimation_Rotate);

break;

default:

break;

}

 

}

其中在java代码中实现的方式有两种:

(1)、使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件。

EgAnimationUtils.loadAnimation(this,R.anim.anim_rotate);

(2)、根据各自的构造方法来初始化一个实例对象

Eg:myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

 

posted on 2013-01-23 15:30  Tiny339  阅读(2490)  评论(0编辑  收藏  举报