看電影的時候,想必大家經常會在電影開場的時候看見一段故事梗概的介紹,其中有一種顯示的效果是一個字一個字先后順序出現在屏幕上的,并且每出現一個字,還有一個鍵盤打字的聲音出現。這個在android上面怎么做呢?
最近做的一個游戲,用到了這個效果,我是這樣做的。
首先,重寫了一個SurfaceView。在這個SurfaceView里面去顯示我的這段故事梗概的文字。那如何去實現按照順序一個字一個字顯示出來呢?Thread 首當其沖想到的就是他了。
開一個線程去做這個事情,每顯示一個字,就讓線程sleep一下,然后再顯示一個字,最后直到顯示了所有的字。這個時候就釋放這個線程。
那具體怎么做呢?下面一步一步來:(由于代碼太多,我只貼重要的核心代碼)
第一步:
重寫一個自己的Thread 命名為MyThread。
MyThread 的run方法實現:
public void run() {
while(my_thread_runing){ // 這里my_thread_runing 是一個boolean變量,用 //于控制線程是否運行
if(play_text_all_nums > play_text_nums && holder != null)
{//play_text_all_nums 代表所有顯示字的數量。play_text_nums 代表 //當前顯示的字數
get_the_main_explain_currtext(); //計算出當前顯示的那些字
Draw_the_main_explain_text(holder);//顯示出這些字
synchronized (this) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
else
{//否則停止線程
my_thread_runing = false;
first_into = false;
if(my_thread != null) my_thread.interrupt();
}
}
}
第二步:解釋則個函數的實現get_the_main_explain_currtext(); //計算出當前顯示的那些字
首先:由字符串ID取出所有的字(這里這個字符串有一個特點:字與字間有一個空格),然后計算出一個有多少個字play_text_all_nums
然后:每一次取出需要顯示的字裝載到一個新的字符串變量里面String str_text_curr;
OK。這樣就實現了。下面問題來了。當正在一個個顯示字的時候,按home按鍵退出,然后在進入這個應用時候!可能出現一個問題:那就是 MyThread這個線程跑不起來。
因為這一次進入 MyThread根本沒有start。當然,這里不是討論為什么出現這個問題。而是想說home按鍵。網上有大量的人詢問如何屏蔽home按鍵這個時間。其實google是沒有開放home按鍵事件,也就是這個按鈕的事件消息不會上傳到APP通知我們的。既然google沒有開放,我認為大家還是不要這么去做,畢竟google這么去做事有他的優點的,前不久,我去網上下了一個應用,結果這個應用跑起來非常慢,我按返回按鍵沒有反應,結果是我狂試了所有能按的按鍵和觸摸屏,就是退不出來,唯一的辦法就把手機的電池給拿掉,從新開機。在這里我非常希望大家不要去把原本好好的android系統給搞亂了。
那你說,我要解決問題怎么辦,你又要我不要亂改系統原來的設計。我覺得辦法很多,只要你想一定可以搞定的。 看看上面的代碼,我還加了這個Boolean變量first_into = false; 用他也是可以解決問題的!