Android Animation动画的xml使用

版权所有,禁止匿名转载;禁止商业使用。

在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。


Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation (渐变动画),另一种是frame by frame animation (画面转换动画)。


tweened animation渐变动画有以下两种类型:


1.alpha     渐变透明度动画效果


2.scale    渐变尺寸伸缩动画效果


frame by frame animation 画面转换动画有以下两种类型:


1.translate   画面转换位置移动动画效果


2.rotate    画面转移旋转动画效果


在这里,我使用XML来做动画。实现基本的动画,如淡入,旋转等。


步骤: 1、 首先在res目录中新建anim的文件夹,在anim中新建需要的动画xml资源文件。


anim/alpha.xml(渐变动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <alpha
    android:fromAlpha="0.1"
    android:toAlpha="1.0"
    android:duration="3000"/> 
<!-- 透明度控制动画效果 alpha
    浮点型值:
      fromAlpha 属性为动画起始时透明度  0.0表示完全透明
      toAlpha   属性为动画结束时透明度  1.0表示完全不透明
      以上值取0.0-1.0之间的float数据类型的数字
    
    长整型值:
      duration  属性为动画持续时间 以毫秒为单位
-->
</set>

anim/scale.xml(伸缩动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <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>
<!-- 尺寸伸缩动画效果 scale
  属性:interpolator 指定一个动画的插入器
   在试验过程中,使用android.res.anim中的资源时候发现
   有三种动画插入器:
       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%中取值
          50%为物件的X或Y方向坐标上的中点位置
   
   长整型值:
       duration  属性为动画持续时间   以毫秒为单位

   布尔型值:
       fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->

anim/translate.xml(移动动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <translate
    android:fromXDelta="30"
    android:toXDelta="-80"
    android:fromYDelta="30"
    android:toYDelta="300"
    android:duration="2000"/>
<!-- translate 位置转移动画效果
    整型值:
      fromXDelta 属性为动画起始时 X坐标上的位置	
      toXDelta   属性为动画结束时 X坐标上的位置
      fromYDelta 属性为动画起始时 Y坐标上的位置
      toYDelta   属性为动画结束时 Y坐标上的位置
      注意:
           没有指定fromXType toXType fromYType toYType 时候,
           默认是以自己为相对参照物			 
    长整型值:
      duration  属性为动画持续时间   以毫秒为单位
-->
</set>

anim/rotate.xml(旋转动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <rotate 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromDegrees="0" 
    android:toDegrees="+350"		 
    android:pivotX="50%" 
    android:pivotY="50%"	 
    android:duration="3000" />  
<!-- rotate 旋转动画效果
     属性:interpolator 指定一个动画的插入器
       在试验过程中,使用android.res.anim中的资源时候发现
       有三种动画插入器:
        accelerate_decelerate_interpolator   加速-减速 动画插入器
        accelerate_interpolator			   加速-动画插入器
        decelerate_interpolator			   减速- 动画插入器
       其他的属于特定的动画效果
               
     浮点数型值:
      fromDegrees 属性为动画起始时物件的角度	
      toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
    
      说明:	当角度为负数——表示逆时针旋转
           当角度为正数——表示顺时针旋转			  
           (负数from——to正数:顺时针旋转)   
           (负数from——to负数:逆时针旋转) 
           (正数from——to正数:顺时针旋转) 
           (正数from——to负数:逆时针旋转)	   

      pivotX	 属性为动画相对于物件的X坐标的开始位置
      pivotY	 属性为动画相对于物件的Y坐标的开始位置
        
      说明:  以上两个属性值 从0%-100%中取值
           50%为物件的X或Y方向坐标上的中点位置

    长整型值:
      duration  属性为动画持续时间   以毫秒为单位
-->
</set>

2、


xml资源文件创建完成之后,接下来就是调用这些资源文件。以alpha为例,先创建AlphaActivity。


在activity_alpha.xml中随便放一张背景图片

<RelativeLayout 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"
  android:background="@drawable/test_bg"
  tools:context=".AlphaActivity" >

</RelativeLayout>
AlphaActivity.java

package com.example.animation_demo;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
 
public class AlphaActivity extends Activity {
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View view=View.inflate(this, R.layout.activity_alpha, null);
    setContentView(view);
    //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
    Animation animation=AnimationUtils.loadAnimation(this, R.anim.alpha);
    view.startAnimation(animation);
    animation.setAnimationListener(new AnimationListener() {
      @Override
      public void onAnimationStart(Animation arg0) {}   //在动画开始时使用
       
      @Override
      public void onAnimationRepeat(Animation arg0) {}  //在动画重复时使用

      @Override
      public void onAnimationEnd(Animation arg0) {
        Toast.makeText(AlphaActivity.this, "在动画结束时使用", Toast.LENGTH_SHORT).show();
      }
    });
  }
}

这个是整个layout文件的动画,也可以让任何UI元素调用starAnimation方法。


例如:textMsg.startAnimation(animation); 这时候就不需要动画填充指定xml了


View view=View.inflate(this, R.layout.activity_alpha, null);

setContentView(view);

直接setContentView(R.layout.activity_alpha); 就OK了。卒。


今天刚用到,迟点贴出图片。。


0 0