有的Android軟件需要在啟動的時候顯示一個啟動畫面,可以是一張圖或者一些設置什么呢,還有一個好處就是,可以趁機在后台加載數據。
創建啟動畫面一般有兩種方式:
1、建立一個activity,展示啟動畫面,然后再啟動主Activity
2、在主Activity建立一個展示區,然后隱藏掉。
第二個其實更簡單,但是這個就展示一次的東西戳在代碼里,怎么想都不舒服,而且還可能設計效率問題。所以在項目里還是選用第一種。
首先建立一個Activity,這里明明為HelloActivity,界面就是activity_hello.xml。
接下來修改AndroidManifest.xml文件,把主Activity換成HelloActivity。把之前的主Activity放到下面。
<activity android:name="com.phone.config.SetActivity" android:icon="@drawable/set" android:label="@string/app_name" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="adjustUnspecified|stateHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
這樣HelloActivity就優先啟動了,在java文件中編寫代碼,啟動完畫面后啟動主界面。
在activity_hello.xml中就一個LinearLayout 和一個ImageView,界面很簡單,但要保證他全屏,其實我們在設置文件里面已經設置了全屏,在java文件的onCreate方法里也可以設置:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設置無標題 requestWindowFeature(Window.FEATURE_NO_TITLE); //設置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_hello); iv = (ImageView)this.findViewById(R.id.iv); timer = new Timer(true); timer.schedule(hello, 200, 150); //延遲200毫秒執行,每150毫秒執行一次 }
這里面用了一個Timer,用Timer是因為,我的項目啟動畫面是一個動態的,但是Android又不支持Gif圖播放,但項目中就這個地方用到gif,所以就把gif給分割成jpg文件,然后用timer播放,播放完成后就加載新Activity。
編寫Timer的TimerTask類,重寫run()方法就可以了。
TimerTask hello = new TimerTask(){ @Override public void run() { if(index < 5){ index++; Message msg = new Message(); msg.what = index; handler.sendMessage(msg); }else if(index < 8){ index++; //靜止片刻 }else{ //停止播放,啟動主Activity
timer.cancel(); Intent intent = new Intent(HelloActivity.this, MainActivity.class); startActivity(intent); finish(); //不加這一句,按回退鍵就會回到歡迎界面不合理。 } } };
這里還涉及到了一個消息處理,因為Android不允許隨便讓其他線程操作UI,但是處理系統消息的Handle卻是可以得,所以Timer定時向Handle發送一個消息,用來更改界面。
final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //循環播放圖片
iv.setBackgroundResource(hellores[msg.what]);
}
};
這樣,一個簡單的啟動畫面就做好了。
提示:在Android4.0版本中,這種方法無法隱藏系統的狀態欄,需要修改底層代碼。