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

今天剛用到,遲點貼出圖片。。

附上找到的一些基本的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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。