Android使用XML做动画UI

在Android应用程序,使用动画效果,能带给用户更好的感觉。做动画可以通过XML或Android代码。
本教程中,介绍使用XML来做动画。在这里,介绍基本的动画,如淡入,淡出,旋转等。

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

第一步: 创建anim文件夹放置动画xml文件
在res文件夹下,创建一个anim的子文件夹。

         Android使用XML做动画UI

第二步: 加载动画
接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xml

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) - 当动画启动时调用

@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);

 

完整代码: 

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属性

重要的XML动画属性
android:duration 动画持续时间,时间以毫秒为单位
android:startOffset 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
android:interpolator 指定一个动画的插入器
android:fillAfter 当设置为true ,该动画转化在动画结束后被应用
android:repeatMode 定义重复的行为
android:repeatCount 动画的重复次数

 

以下是一些基本的动画XML.

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

  

 

 

 

你可能感兴趣的:(android)