android动画效果(Animation)

本文详细介绍Android动画编程的基础知识,包括四种动画类型:渐变透明度、渐变尺寸、位置移动和旋转动画。同时讲解了两种动画模式:渐变动画和画面转换动画,并提供在XML文件及Java代码中实现动画的方法。
摘要由CSDN通过智能技术生成

动画效果编程基础——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);

 

转载于:https://www.cnblogs.com/Tiny339/archive/2013/01/23/android_Animation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值