为Android应用程序添加Splash启动画面
目前,多数应用程序为了在启动时显示公司、产品或者开发者等相关信息,都会有一个Splash界面。在Splash界面等待的同时,也可以预加载数据、系统检测等操作。有两种方法可以实现”Splash启动画面“效果,下面说一下原理:
其一,两个Activity,通过设置Handler类postDelayed()方法的参数来延迟第二个Activity的显示,经过设定的时间后跳转到第二个Activity界面,这种方法也是最常用的。
其二,一个Activity,程序启动时显示启动画面,启动后使用setVisibility(View.GONE)将启动画面隐藏起来。但是,当Activity中要显示的内容较多时,该方法就会影响程序的性能。
下面分别看一下这两种方法具体如何实现:
一、两个Activity,postDelayed()延迟显示第二个Activity
首先,制作splash启动界面和另一个要跳转到的界面,在AndroidManifest.xml中声明两个Activity,定义splashActivity为默认Activity,将android:theme属性设置为”@android:style/Theme.NoTitleBar”去掉标题。
下面说一下,实现该方法的主要java代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
SplashActivity.this.startActivity(mainIntent);//跳转到MainActivity
SplashActivity.this.finish();//结束SplashActivity
}
}, 3000);//给postDelayed()方法传递延迟参数
}
其中,handler类有三种方法来实现设置runnable对象的时间:
1、post(Runnable r),表示立即执行Runnable对象 ;
2、postAtTime(Runnable r, long uptimeMillis),在指定的时间点(uptimeMillis)执行Runnable对象 ;
3、postDelayed(Runnable r, long delayMillis),在指定的时间间隔后(delayMillis)执行Runnable对象。
另外,还可以使用overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)给Activity添加切换效果(左滑动,右滑动,淡入淡出等)。
二、一个Activity,使用setVisibility(View.GONE)隐藏指定区域
该方法中只有一个Activity,在应用启动后发送一个消息,利用setVisibility(View.GONE)隐藏指定区域,从而实现”启动画面“效果。具体代码如下:
private LinearLayout splash;//要显示的启动区域
private Handler splashHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
SystemClock.sleep(4000);
splash.setVisibility(View.GONE);//隐藏splash区域
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
splash = (LinearLayout) findViewById(R.id.splashscreen);
Message msg = new Message();
msg.what = 0;
splashHandler.sendMessageDelayed(msg, 1000); //发送消息
}