Android使用XML作動畫UI

在Android應用程序,使用動畫效果,能帶給用戶更好的感受。作動畫能夠經過XML或Android代碼。
本教程中,介紹使用XML來作動畫。在這裏,介紹基本的動畫,如淡入,淡出,旋轉等。html

效果: http://www.56.com/u82/v_OTM4MDk5MTk.htmljava

第一步: 建立anim文件夾放置動畫xml文件
在res文件夾下,建立一個anim的子文件夾。android

         

第二步: 加載動畫
接着在Activity建立一個Animation類,而後使用AnimationUtils類加載動畫xmlapp

Animation animFadein;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fadein);

txtMessage = (TextView) findViewById(R.id.txtMessage);
btnStart = (Button) findViewById(R.id.btnStart);

// 加載動畫
animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);

}

  


第三步: 設置動畫監聽器
若是你要監聽動畫的事件,如開始,結束等,你須要實現AnimationListener監聽器,重寫如下方法。
onAnimationEnd(Animation animation) - 當動畫結束時調用
onAnimationRepeat(Animation animation) - 當動畫重複時調用
onAniamtionStart(Animation animation) - 當動畫啓動時調用ide

@Override
public void onAnimationEnd(Animation animation) {
// 在動畫結束後使用

// check for fade in animation
if (animation == animFadein) {
Toast.makeText(getApplicationContext(), "Animation Stopped",
Toast.LENGTH_SHORT).show();
}

}

@Override
public void onAnimationRepeat(Animation animation) {
//當動畫重複時使用

}

@Override
public void onAnimationStart(Animation animation) {
//當動畫開始使用

}

  


最後一步: 讓動畫動起來啦。能夠使用任何UI元素調用startAnimation方法。
如下是一個Textview元素調用的。
txtMessage.startAnimation(animFadein);動畫

 

完整代碼: this

FadeInActivity(淡入動畫)
package com.chaowen.androidanimations;

import info.androidhive.androidanimations.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * @author chaowen
 *
 */
public class FadeInActivity extends Activity implements AnimationListener {

	TextView txtMessage;
	Button btnStart;

	Animation animFadein;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_fadein);

		txtMessage = (TextView) findViewById(R.id.txtMessage);
		btnStart = (Button) findViewById(R.id.btnStart);

		// 加載動畫
		animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
				R.anim.fade_in);
		
		// 設置監聽
		animFadein.setAnimationListener(this);

		// 按鈕
		btnStart.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				txtMessage.setVisibility(View.VISIBLE);
				
				// 開始動畫
				txtMessage.startAnimation(animFadein);
			}
		});

	}

	@Override
	public void onAnimationEnd(Animation animation) {
		// 在動畫結束後使用

		// check for fade in animation
		if (animation == animFadein) {
			Toast.makeText(getApplicationContext(), "Animation Stopped",
					Toast.LENGTH_SHORT).show();
		}

	}

	@Override
	public void onAnimationRepeat(Animation animation) {
		//當動畫重複時使用

	}

	@Override
	public void onAnimationStart(Animation animation) {
		//當動畫開始使用

	}

}

  

一些重要的XML屬性rest

重要的XML動畫屬性
android:duration 動畫持續時間,時間以毫秒爲單位
android:startOffset 動畫之間的時間間隔,從上次動畫停多少時間開始執行下個動畫
android:interpolator 指定一個動畫的插入器
android:fillAfter 當設置爲true ,該動畫轉化在動畫結束後被應用
android:repeatMode 定義重複的行爲
android:repeatCount 動畫的重複次數xml

 

如下是一些基本的動畫XML.htm

Fade In:  淡入

  alpha是漸變透明度效果,值由0到1

fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >
 
    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="1.0" />
 
</set>

Fade Out : 淡出

 以Fade In恰好相反,值由1到0.

fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >
 
    <alpha
        android:duration="1000"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="0.0" />
 
</set>

 

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
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="600"
        android:repeatMode="reverse"
        android:repeatCount="infinite"/>
</set>

 Zoom In : 放大

zoom_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >
 
    <scale
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="3"
        android:toYScale="3" >
    </scale>
 
</set>

Zoom Out: 縮小

zoom_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >
 
    <scale
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.5"
        android:toYScale="0.5" >
    </scale>
 
</set>

 

Rotate: 旋轉

rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="600"
        android:repeatMode="restart"
        android:repeatCount="infinite"
        android:interpolator="@android:anim/cycle_interpolator"/>
 
</set>

還有幾個就再也不列出,有興趣下源碼看。

http://pan.baidu.com/share/link?shareid=2682864564&uk=1863281063

相關文章
相關標籤/搜索