溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

一個(gè)android應(yīng)用效果開(kāi)發(fā)引發(fā)的慘案(android Home按鍵)

發(fā)布時(shí)間:2020-07-09 22:23:59 來(lái)源:網(wǎng)絡(luò) 閱讀:685 作者:滴掉ANDROID 欄目:移動(dòng)開(kāi)發(fā)
   看電影的時(shí)候,想必大家經(jīng)常會(huì)在電影開(kāi)場(chǎng)的時(shí)候看見(jiàn)一段故事梗概的介紹,其中有一種顯示的效果是一個(gè)字一個(gè)字先后順序出現(xiàn)在屏幕上的,并且每出現(xiàn)一個(gè)字,還有一個(gè)鍵盤(pán)打字的聲音出現(xiàn)。這個(gè)在android上面怎么做呢?
最近做的一個(gè)游戲,用到了這個(gè)效果,我是這樣做的。
首先,重寫(xiě)了一個(gè)SurfaceView。在這個(gè)SurfaceView里面去顯示我的這段故事梗概的文字。那如何去實(shí)現(xiàn)按照順序一個(gè)字一個(gè)字顯示出來(lái)呢?Thread 首當(dāng)其沖想到的就是他了。
開(kāi)一個(gè)線程去做這個(gè)事情,每顯示一個(gè)字,就讓線程sleep一下,然后再顯示一個(gè)字,最后直到顯示了所有的字。這個(gè)時(shí)候就釋放這個(gè)線程。
那具體怎么做呢?下面一步一步來(lái):(由于代碼太多,我只貼重要的核心代碼)
第一步:
        重寫(xiě)一個(gè)自己的Thread 命名為MyThread。
        MyThread 的run方法實(shí)現(xiàn):
                                 public void run() {
                                                          while(my_thread_runing){ // 這里my_thread_runing 是一個(gè)boolean變量,用                                                                                                           //于控制線程是否運(yùn)行
                                                               if(play_text_all_nums > play_text_nums && holder != null)
                                                                    {//play_text_all_nums  代表所有顯示字的數(shù)量。play_text_nums  代表                                                                          //當(dāng)前顯示的字?jǐn)?shù)
                                                                            get_the_main_explain_currtext(); //計(jì)算出當(dāng)前顯示的那些字
                                                                            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();
                                                                   }

                                                           }
                                            }

第二步:解釋則個(gè)函數(shù)的實(shí)現(xiàn)get_the_main_explain_currtext(); //計(jì)算出當(dāng)前顯示的那些字

            首先:由字符串ID取出所有的字(這里這個(gè)字符串有一個(gè)特點(diǎn):字與字間有一個(gè)空格),然后計(jì)算出一個(gè)有多少個(gè)字play_text_all_nums
             然后:每一次取出需要顯示的字裝載到一個(gè)新的字符串變量里面String str_text_curr;

OK。這樣就實(shí)現(xiàn)了。下面問(wèn)題來(lái)了。
當(dāng)正在一個(gè)個(gè)顯示字的時(shí)候,按home按鍵退出,然后在進(jìn)入這個(gè)應(yīng)用時(shí)候!可能出現(xiàn)一個(gè)問(wèn)題:那就是  MyThread這個(gè)線程跑不起來(lái)。
因?yàn)檫@一次進(jìn)入 MyThread根本沒(méi)有start。當(dāng)然,這里不是討論為什么出現(xiàn)這個(gè)問(wèn)題。而是想說(shuō)home按鍵。網(wǎng)上有大量的人詢(xún)問(wèn)如何屏蔽home按鍵這個(gè)時(shí)間。其實(shí)google是沒(méi)有開(kāi)放home按鍵事件,也就是這個(gè)按鈕的事件消息不會(huì)上傳到APP通知我們的。既然google沒(méi)有開(kāi)放,我認(rèn)為大家還是不要這么去做,畢竟google這么去做事有他的優(yōu)點(diǎn)的,前不久,我去網(wǎng)上下了一個(gè)應(yīng)用,結(jié)果這個(gè)應(yīng)用跑起來(lái)非常慢,我按返回按鍵沒(méi)有反應(yīng),結(jié)果是我狂試了所有能按的按鍵和觸摸屏,就是退不出來(lái),唯一的辦法就把手機(jī)的電池給拿掉,從新開(kāi)機(jī)。在這里我非常希望大家不要去把原本好好的android系統(tǒng)給搞亂了。
那你說(shuō),我要解決問(wèn)題怎么辦,你又要我不要亂改系統(tǒng)原來(lái)的設(shè)計(jì)。我覺(jué)得辦法很多,只要你想一定可以搞定的。 看看上面的代碼,我還加了這個(gè)Boolean變量first_into = false; 用他也是可以解決問(wèn)題的!


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI