下載了韓寒的電子雜誌《一個》,它有一個廣告,就是每次進入程序的時候都會有一個靜態的圖片(如果沒猜錯的話應該是ImageView),然後顯示幾秒鐘過後才進入真正的程序,其他的一些APP中也有一些是剛進程序的時候,先顯示一張靜態的等待圖片,其實那個是等待加載的圖片,其實功能也和這個類似,只不過那個是加載完成後再跳轉,我這個爲了實現定時就是顯示固定的實現,那麼這個簡單的有用的小功能是如何實現的呢?
首先這個功能要用到兩個知識點一個是Handler 一個是定時器工具TimerTask。備註:一般情況下TImerTask我們都是配合Timer來使用利用Timer來控制我們需要的時間。例如5秒後執行run()中的內容。
TimerTask task = new TimerTask() {
@Override
public void run() {
// to do what you want
}
};
Timer timer = new Timer();
timer.schedule(task, 5000);
我們的需求實現起來其實很簡單,那就是在一個activity裏面有一個ImageView開始的時候讓它顯示5秒,過後隱藏它就能達到我們的效果了,這個時候如果用上述的方法的話,則程序運行會報錯。
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
這主要是Android的相關View和控件不是線程安全的,所以使用Handler可以很好的處理主線程UI的更新操作,那這裏既然引入了Handler那麼我們就可以利用Handler來控制時間了,所以就不用Timer了最後的代碼如下:
TimerTaskActivity.java
package com.challen;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
public class TimerTaskTestActivity extends Activity {
ImageView image1;
Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉title標題欄
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// //設置activity全屏
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
//設置顯示的XML,需要注意的是去掉狀態欄和全屏的操作要放在setContentView之前,不然會報錯。
setContentView(R.layout.main);
// 顯示的全屏圖片
image1 = (ImageView) findViewById(R.id.Image1);
handler = new Handler();
TimerTask task = new TimerTask() {
public void run() {
// 隱藏掉全屏圖片
image1.setVisibility(View.GONE);
}
};
// 5秒後執行TimerTask任務
handler.postDelayed(task, 5000);
}
}
好了這樣就實現了進入程序的時候首先是顯示圖片,然後顯示5秒後纔是去掉這張全屏圖的內容,順帶把佈局也放上來吧,這個ImageView需要放到最上面一層
main.xml:
<?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:orientation="vertical" >
<ImageView
android:id="@+id/Image1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/bg"
android:visibility="visible"
/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="圖片消失後的內容" />
</LinearLayout>