这是一个简单的例子,主要功能是在欢迎界面是用一个渐变动画,当动画播放完成后,跳转到主界面中去。
首先需要在res文件夹下新建一个anim文件夹,这个文件夹用来存放动画定义的xml文件,渐变动画的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!--
alpha表示渐变动画
duration设置动画播放时长
fromAlpha表示动画开始时的透明度
toAlpha表示动画结束时的透明度
(0表示完全透明 1表示完全不透明)
-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="0.3"
android:toAlpha="1.0" />
接着我们在欢迎界面里面去使用AnimationUtils加载刚刚定义的动画,然后播放动画、监听动画,
需要注意的是这里需要使用LayoutInflater这个类加载res资源下的布局xml文件,不能使用findViewById(),
详细请参考以下代码:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import com.bear.notes.R;
import com.bear.notes.utils.CommonUtil;
public class SplashActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CommonUtil.setNoTitleBar(SplashActivity.this);
CommonUtil.setFullScreen(SplashActivity.this);
//使用LayoutInflater来加载activity_splash.xml视图
View rootView = LayoutInflater.from(this).inflate(R.layout.activity_splash, null);
/**
* 这里不能使用findViewById(R.layout.acitivyt_spash)方法来加载
* 因为还没有开始调用setContentView()方法,也就是说还没给当前的Activity
* 设置视图,当前Activity Root View为null,findViewById()方法是从当前
* Activity的Root View中获取子视图,所以这时候会报NullPointerException异常
*
* View rootView = findViewById(R.layout.activity_splash);
*
*/
setContentView(rootView);
mHandler = new Handler();
//初始化渐变动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
//设置动画监听器
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
//当监听到动画结束时,开始跳转到MainActivity中去
mHandler.post(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashActivity.this, MainActivity.class);
startActivity(i);
SplashActivity.this.finish();
}
});
}
});
//开始播放动画
rootView.startAnimation(animation);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.splash, menu);
return true;
}
}