創建一個android的Splash Screen
在開發android應用的時候 ,尤其是游戲的時候,經常需要有一個Splash Screen(就類似于Eclipse啟動的畫面)。但是,android好像沒有對這個有很好的支持(也許我沒找到吧)。比如iphone,只需要將 Splash的圖片以default命名,就可以可以出現Splash Screen了,方式很簡單。那在android中怎么辦呢?我試了兩種方法,下面我給大家一一道來。
第一種,我采用的方式是在Activity中新開一個線程,這個線程判斷過去了多長時間,如果到大了設定的時間,則結束當前的Splash Screen,啟動新的Activity,往往是游戲的主菜單。這種方式表面上使用沒有任何的問題,但是,當我結束線程的使用stop方法的時候,android實際上跑出了一個異常:不支持這個操作。盡管能夠運行,但是有異常,有點不爽。所以我就改造了一下,使用了第二種方法。
第二種,通過Timer和TimerTask,Handler的結合。Timer來計時,TimerTask來判斷是不是已經滿足設定時間,hanlder來具體啟動新的Activity。這種方法比較好,沒有出現異常。具體的實現方法:
在Activity中的onCreate方法中,初始化并開始Timer:
timer = new Timer(true); startTime = System.currentTimeMillis(); timer.schedule(task, 0, 1);startTime是開始時間,要判斷時間差是否滿足設定的時間。下面是TimerTask的代碼:
private final TimerTask task = new TimerTask() { @Override public void run() { if (task.scheduledExecutionTime() - startTime == 1000 || !_active) { Message message = new Message(); message.what = 0; timerHandler.sendMessage(message); timer.cancel(); this.cancel(); } } };還有handler的代碼:
private final Handler timerHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0: SplashScreen.this.finish(); //start new activity here break; } super.handleMessage(msg); } };
這樣一個基本的Splash就實現了。
另外,不知道大家發現沒有,我的代碼中有一個這個_active變量,這個是做什么的呢?見下面的代碼:
@Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { _touched = false; } return true; }
在顯示Splash Screen的過程中,如果觸摸了屏幕,會直接跳過Splash Screen的,給用戶以更高的體驗。
沒有更深入研究,歡迎大家討論。
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!