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(渐变动画)



     


anim/scale.xml(伸缩动画)



   


anim/translate.xml(移动动画)


     

anim/rotate.xml(旋转动画)



      

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

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



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了。卒。

效果图:
android Animation动画的xml使用_第1张图片

附上找到的一些基本的xml效果:

Fade In:淡入

alpha是渐变透明度效果,值由0到1

fade_in.xml  
  
  
   
      
 
Fade Out :淡出
以Fade In刚好相反,值由1到0
fade_out.xml  
  
  
   
      
  
Cross Fading:  交叉的淡入和淡出
同时使用Fade in和Fade out可以达到交叉的效果
public class CrossfadeActivity extends Activity implements AnimationListener {  
  
    TextView txtMessage1, txtMessage2;  
    Button btnStart;  

    Animation animFadeIn, animFadeOut;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_crossfade);  

        txtMessage1 = (TextView) findViewById(R.id.txtMessage1);  
        txtMessage2 = (TextView) findViewById(R.id.txtMessage2);  
        btnStart = (Button) findViewById(R.id.btnStart);  

        // load animations  
        animFadeIn = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_in);  
        animFadeOut = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_out);  

        // set animation listeners  
        animFadeIn.setAnimationListener(this);  
        animFadeOut.setAnimationListener(this);  
  
        // button click event  
        btnStart.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                txtMessage2.setVisibility(View.VISIBLE);  
                txtMessage2.startAnimation(animFadeIn);  
                txtMessage1.startAnimation(animFadeOut);  
            }
        });
    }
  
    @Override  
    public void onAnimationEnd(Animation animation) {  
          
        if (animation == animFadeOut) {  
            txtMessage1.setVisibility(View.GONE);  
        }  
          
        if(animation == animFadeIn){  
            txtMessage2.setVisibility(View.VISIBLE);  
        }  
    }  
  
    @Override  
    public void onAnimationRepeat(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
  
    @Override  
    public void onAnimationStart(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
}

BLink:若隐若现

blink.xml  
  
  
      
  
Zoom In:放大
zoom_in.xml  
  
  
      
      
  
Zoom Out:缩小
  
  
      
      
  
Rotate:旋转
rotate.xml
  
  
      
好长啊。。。既然你们都看到这里了,再多说几句。。

根节点的属性:

名称

属性

备注

android:shareInterpolator

是否共享插入器

共享时,四个子节点都用一个插入器

android:interpolator

指定一个动画的插入器

使用系统资源

android:fillEnabled

 

当设置为true时,fillAfter和fill, Befroe将会都为true,此时会忽略fillBefore 和fillAfter两种属性

android:fillAfter

该动画转化是否在动画结束后被应用

boolean

android:fillBefore

该动画转化是否在动画开始前被应用

boolean

android:repeatMode

重复模式

"restart"  或者 "reverse"

android:repeatCount

重复次数

integer

android:duration

动画持续时间

integer

android:startOffset

动画时间间隔

long

android:zAdjustment

定义动画z order的变换

[normal] or [top] or [bottom]

android:detachWallpaper

 

boolean


欢迎交流 http://blog.csdn.net/ycwol/article/details/41118831

你可能感兴趣的:(android)