rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » Android

[Android]一个闪屏Splash的示例程序(1)

       用过手机QQ的基本上都知道,刚启动程序时候会在一个界面停留一会,按任意键的就直接跳过,这就是所谓的闪屏。那么,在Android中怎样实现这样的效果呢?      

1、新建一个Android项目,命名为SplashyDemo,结构如下所示

   [Android]一个闪屏Splash的示例程序(1)

   2、 添加资源图片

   首先我们得有闪屏时候显示的图片资源文件,并将图片放在res/drawable目录下,命名为splash.jpg:

  

   这时候会在R类中自动添加资源文件对应的ID,如下所示:

     

   3、编写闪屏的界面布局文件,放在res/layout目录下,如下图

   [Android]一个闪屏Splash的示例程序(1)

   该布局内容如下所示:     


<?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;
     }
}
顶一下
(0)
踩一下
(0)