用过手机QQ的基本上都知道,刚启动程序时候会在一个界面停留一会,按任意键的就直接跳过,这就是所谓的闪屏。那么,在Android中怎样实现这样的效果呢?
1、新建一个Android项目,命名为SplashyDemo,结构如下所示:
![[Android]一个闪屏Splash的示例程序(1)](http://img.huomo.cn/article/1d7/21711/1.jpg)
2、 添加资源图片:
首先我们得有闪屏时候显示的图片资源文件,并将图片放在res/drawable目录下,命名为splash.jpg:
这时候会在R类中自动添加资源文件对应的ID,如下所示:
3、编写闪屏的界面布局文件,放在res/layout目录下,如下图:
![[Android]一个闪屏Splash的示例程序(1)](http://img.huomo.cn/article/1d7/21711/2.jpg)
该布局内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:id="@+id/img1"
android:src="@drawable/splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageView>
</LinearLayout>
从上述代码中可以看出,界面布局采用的是线性布局(在后面会专门介绍Android中的各种界面布局的),并且子控件仅仅是ImageView用来显示图片。如果你在运行时发现图片不在中间或者被拉伸等问题,还请仔细参考下上面代码中的一些布局设置细节,如LinearLayout的gravity属性设置为center以及宽度和高度设置为撑满父容器的模式,ImageView控件的宽度与高度设置为适合子控件模式,并且其数据源通过src属性绑定到drawable
4、编写闪屏界面的逻辑代码:
逻辑代码如下:
package cnblogs.com;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;public class SplashyDemo extends Activity {
private long m_dwSplashTime=3000;
private boolean m_bPaused=false;
private boolean m_bSplashActive=true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash); Thread splashTimer=new Thread()
public void run(){
try{
//wait loop
long ms=0;
while(m_bSplashActive && ms<m_dwSplashTime){
sleep(100);
if(!m_bPaused)
ms+=100;
} startActivity(new Intent("com.google.app.splashy.CLEARSPLASH"));
catch(Exception ex){
Log.e("Splash",ex.getMessage());
finally{
finish();
}
}
};
splashTimer.start();
} @Override
protected void onPause() {
super.onPause();
m_bPaused=true;
} @Override
protected void onResume() {
super.onResume();
m_bPaused=false;
} @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
switch(keyCode){
case KeyEvent.KEYCODE_MENU:
m_bSplashActive=false;
break;
case KeyEvent.KEYCODE_BACK:
/*两种退出方法*/
/* System.exit(0);*/
/* android.os.Process.killProcess(android.os.Process.myPid());*/
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
break;
return true;
}
}