




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android手機(jī)軟件開發(fā)設(shè)計(jì)說明書基于Android平臺(tái)的快樂數(shù)獨(dú)引言目前隨著移動(dòng)設(shè)備越來越普及以及移動(dòng)設(shè)備的硬件的提升,移動(dòng)設(shè)備的功能越來越完善,移動(dòng)設(shè)備的系統(tǒng)平臺(tái)也日漸熾熱起來。目前國(guó)內(nèi)最常見的移動(dòng)開發(fā)平臺(tái)有Symbian,iPhone,WindowsPhone以及當(dāng)下正在逐步興起的Android。目前為止國(guó)內(nèi)已經(jīng)有很多Android系統(tǒng)的用戶。截止2021年第二季度Android系統(tǒng)的國(guó)內(nèi)市場(chǎng)占有率已經(jīng)過10%,在西歐以及北美智能市場(chǎng)占有率也在20%左右??梢夾ndroid系統(tǒng)正在崛起之中。但是對(duì)于Android系統(tǒng)的應(yīng)用和開發(fā)在國(guó)內(nèi)仍然屬于起步和探索階段。急需要大量的相關(guān)技術(shù)和人員的投入。下面首先介紹一下Android系統(tǒng)。Android是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),是Google在2007年11月5日公布的系統(tǒng)平臺(tái),早期由Google開發(fā),后由(OpenHandsetAlliance〕開發(fā)。它采用了軟件堆層(Softwarestack,又名以軟件疊層〕的架構(gòu),主要分為三局部。低層以Linux核心工作為根底,只提供根本功能;其他的應(yīng)用軟件那么由各公司自行開發(fā),以Java作為編寫程式的一局部。本文對(duì)目前應(yīng)用的Symbian、WindowsMobile、MacOSX和RIM等平臺(tái)的現(xiàn)狀進(jìn)行了分析與比擬。進(jìn)而研究分析了Android平臺(tái)的系統(tǒng)架構(gòu)和組件模型,接著解析了Android中的重要API和應(yīng)用構(gòu)成,以Intent和生命周期的機(jī)制。在此根底上,基于Android平臺(tái)設(shè)計(jì)和開發(fā)校園資訊軟件。本系統(tǒng)界面友好、操作便捷,具有良好的可擴(kuò)展性和可維護(hù)性;系統(tǒng)經(jīng)過測(cè)試,可以穩(wěn)定運(yùn)行,能夠滿足 用戶的根本需求。開展趨勢(shì)隨著3G應(yīng)用的不斷開發(fā)推廣,用戶會(huì)越來越需要更加個(gè)性化、優(yōu)質(zhì)化的多媒體數(shù)據(jù)效勞,用戶希望能夠隨時(shí)、隨地?zé)o縫利用3G網(wǎng)絡(luò)進(jìn)行辦公、網(wǎng)上交易、游戲娛樂、欣賞影視節(jié)目、收聽和下載音樂等。根據(jù)觀察,在不久的將來,移動(dòng)終端將會(huì)在以下假設(shè)干方面具有新的開展。首先,提供智能提醒效勞, 能夠與用戶實(shí)現(xiàn)密切配合,并監(jiān)控用戶的個(gè)性化設(shè)置(保持在本地或者云端〕,當(dāng)重要時(shí)間點(diǎn)或關(guān)鍵事物需要用戶注意時(shí),會(huì)向用戶發(fā)出“提醒〃效勞,效勞包括日程提醒、交通狀況、最正確行車路線、最正確泊位、優(yōu)惠活動(dòng)、實(shí)時(shí)新聞、體育賽事、天氣情況、股市行情、好友活動(dòng)、親友生日等。其次,提供虛擬現(xiàn)實(shí)體驗(yàn),可以借助傳感器、周邊設(shè)備了解到您的身邊環(huán)境,并根據(jù)收集到的信息,智能的為您提供有用的信息,如在網(wǎng)絡(luò)世界養(yǎng)的寵物,可以借助音頻設(shè)備表達(dá)叫聲,借助馬達(dá)和位置傳感器等傳遞其跳、躍等行為信息;也可以在用戶購物時(shí),提供相關(guān)的同類產(chǎn)品價(jià)格參考,提醒用戶附近的那個(gè)賣場(chǎng)更物美價(jià)廉;根據(jù)實(shí)際場(chǎng)景,為用戶及時(shí)提供正在操控的產(chǎn)品的使用方法提醒。接著,發(fā)揮物聯(lián)網(wǎng)的優(yōu)勢(shì),借助無處不在的傳感器,可以感知并分享到周圍世界的海量信息,這些信息將在“云端〃得到整合,幫助用戶及時(shí)、準(zhǔn)確的獲得氣息信息、交通路況。另外借助物聯(lián)網(wǎng),用戶間可以方便、快速的分享資源,協(xié)助和交互。如進(jìn)行端到端的多人游戲、照片分享、書籍分享、音樂分享等。然后,作為經(jīng)濟(jì)工具,在交通或者信息不興旺的情況下,幫助用戶找到最正確的市場(chǎng),獲得有價(jià)值的幫助信息,幫助用戶從事的經(jīng)濟(jì)活動(dòng)的收益率。最后,更加智能、平安的設(shè)備,隨著智能的不斷普及和更加智能,軟件的更新、升級(jí)將會(huì)變得越發(fā)簡(jiǎn)單,并會(huì)為用戶提供工具或信息,讓用戶有能力和權(quán)力決策那些內(nèi)容可以瀏覽、下載或分享。在平安性上也將更加出色,能夠十分有效的幫助用戶進(jìn)行獲取到的內(nèi)容的管理,保護(hù)用戶的個(gè)人隱私和基于的金融活動(dòng)如電子錢包、在線支付、在線貿(mào)易等。Android系統(tǒng)架構(gòu)研究Android是一個(gè)包含操作系統(tǒng)、中介架構(gòu)層及應(yīng)用程序所產(chǎn)生出來的軟件堆棧架構(gòu)。由下而上,其核心為嵌入式Linux2.6作業(yè)系統(tǒng),向上搭配Google為Android開發(fā)的類庫及Android運(yùn)行時(shí),再配合應(yīng)用程序架構(gòu),來開發(fā)各種不同的應(yīng)用程序。Android的功能特征應(yīng)用程序架構(gòu):在應(yīng)用程序架構(gòu)內(nèi)已經(jīng)具備多種不同的根底組件,在開發(fā)應(yīng)用程序時(shí),就可以直接調(diào)用這些組件來使用,可以節(jié)省開發(fā)應(yīng)用程序的心力及時(shí)間。Dalvik虛擬機(jī)器:在Android平臺(tái)上所使用Java虛擬機(jī),不是Sim公司的標(biāo)準(zhǔn)Java虛擬機(jī),而是使用Google自主開發(fā)的代號(hào)為Dalvik的虛擬機(jī),它在保證API方面的兼容的同時(shí),針對(duì)移動(dòng)進(jìn)行了大幅優(yōu)化,占用資源更小,運(yùn)行效率更咼。集成的瀏覽器:集成的瀏覽器是Android內(nèi)建的瀏覽器,是以WebKit的瀏覽引擎為根底所開發(fā)成的。WedKit是一個(gè)開源瀏覽器網(wǎng)頁排版引擎,目前使用WebKit引擎的瀏覽器主要有:Safari,Midori,Epiphany等。配合Android的功能,可以在瀏覽網(wǎng)頁時(shí),到達(dá)更好的效果,例如:局部性的縮放網(wǎng)頁上的資訊、觸控式的操作等效果。⑷優(yōu)化的繪圖能力:在程序里可以用到的繪圖功能分為2D與3D兩個(gè)方面。在2D方面,Android提供了一套特有的類庫(SGL;而在3D方面那么是使用OpenGLES1.0(openGLforEmbeddedsystems)標(biāo)準(zhǔn)的類庫。它們是一種非??斓膱D形引擎,并且支持硬件加速。SQLite數(shù)據(jù)庫:SQLite提供結(jié)構(gòu)化的數(shù)據(jù)存取°SQLite是一款輕型的數(shù)據(jù)庫,它的設(shè)計(jì)目標(biāo)是嵌入式的,目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用的資源非常低。它能夠支持Windows/Linux/Unix等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比方php,Java等,還有ODBC接口,同樣比起Mysql,PostgreSQL來講,它的處理速度比它們都快。它無需安裝和管理配置,它是一個(gè)儲(chǔ)存在單一磁盤文件中的完整數(shù)據(jù)庫,體積小只有250KB但支持?jǐn)?shù)據(jù)庫大小至2TB。它雖然很小巧,但是支持的SQL語句毫不遜色于其它開源數(shù)據(jù)庫。同時(shí)它還支持事務(wù)功能和并發(fā)處理等等。SQLite也是一套開放性的關(guān)聯(lián)式資料庫,其特點(diǎn)在于輕量性方面的設(shè)計(jì)結(jié)構(gòu),更適合在上使用。多媒體的支持能力:主要用于播放媒體文件。這同時(shí)包括對(duì)音頻(如播放MP3或其他音樂文件等)和視頻(如播放從網(wǎng)上下載的視頻)的支持,并支持“播放URI地址〃(Note:URI即是統(tǒng)一資源識(shí)別地址)模式一在網(wǎng)絡(luò)上直接播放的流媒體。另外支持各種通用的靜態(tài)圖像格式,例如:JPG、PNG、GIF等格式。GSM技術(shù):GlobalSystemforMobileCommunications,即全球移動(dòng)通訊系統(tǒng),俗稱〃全球通〃藍(lán)牙、EDGE、3G及Wi-Fi:藍(lán)牙是一種新型、開放、低本錢、短距離的無線連接技術(shù),可取代短距離的電纜,實(shí)現(xiàn)話音和數(shù)據(jù)的無線傳輸。EDGE(EnhancedDataRateforGSM,Evolution),即增強(qiáng)型數(shù)據(jù)速率GSM演進(jìn)技術(shù)。EDGE是一種從GSM到3G的過渡技術(shù),它主要是在GSM系統(tǒng)中采用了一種新的調(diào)制方法,即最先進(jìn)的多時(shí)隙操作和SPSK調(diào)制技術(shù)。由于8PSK可將現(xiàn)有GSM網(wǎng)絡(luò)采用的GMSK調(diào)制技術(shù)的信號(hào)空間從2擴(kuò)展到8,從而使每個(gè)符號(hào)所包含的信息是原來的4倍。Wi-Fi(WirelessFidelity),即無線保真技術(shù),與藍(lán)牙技術(shù)一樣,同屬于在辦公室和家庭中使用的短距離無線技術(shù)。該技術(shù)使用的是2.4GHz附近的頻段,該頻段目前尚屬?zèng)]用許可的無線頻段。其目前可使用的標(biāo)準(zhǔn)有兩個(gè),分別是IEEE802.Ila和IEEE802.11b。這些通訊能力也是屬于 硬件方面的展現(xiàn),也是在開發(fā)Android應(yīng)用程序時(shí)可以突出的特點(diǎn)之一。(9)GPS:GlobalPositioningSystem,即全球定位系統(tǒng),它是一個(gè)由覆蓋全球的24顆衛(wèi)星組成的衛(wèi)星系統(tǒng)。這個(gè)系統(tǒng)可以保證在任意時(shí)刻和任何地點(diǎn)都可以同時(shí)觀測(cè)到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測(cè)點(diǎn)的經(jīng)緯度和高度,以便實(shí)現(xiàn)導(dǎo)航、定位、授時(shí)等功能。這項(xiàng)技術(shù)可以用來引導(dǎo)飛機(jī)、船舶、車輛以及個(gè)人。這個(gè)同樣也是屬于硬體方面的表達(dá),也是在開發(fā)Android應(yīng)用程序是可以突出的特點(diǎn)之一。Android架構(gòu)分析在AndroidSDK中,定義了讓開發(fā)者使用與核心應(yīng)用程序相同API的權(quán)限應(yīng)用程序框架是為了要簡(jiǎn)化組件的重新利用而設(shè)計(jì)的,應(yīng)用程序可以發(fā)布功能為其它應(yīng)用程序所使用。但是,這要受限于應(yīng)用程序架構(gòu)的平安機(jī)制,使用者以用同樣的機(jī)制來新增、置換組件。目前所有的應(yīng)用程序是由效勞及系統(tǒng)來組成,包含有:AFFLICATIONaHarm Cwitxu Hiorw BmswirrA ATIONFRAMED/口月感hwkferaVi^w明LemIggMjinipfXMPPSt^LruAARresAnoroidRuntimeCortbbraitJ■.-—>>LinuxKeoHELB^tr(1PQDnwer&rrwChmwOrwrUSBDrwwKATfsiidlDrrrttWiFiDnwrOrnFtFiPwtrMnapim^ic 一套強(qiáng)大和可擴(kuò)展的視圖系統(tǒng):用來建構(gòu)一個(gè)應(yīng)用程序的根本組件,包了在開發(fā)系統(tǒng)畫面時(shí),常用的列表、網(wǎng)格、文本框、按鈕等控制項(xiàng),甚至是內(nèi)嵌的Web瀏覽器。內(nèi)容提供者:使應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)庫),或者共享它們自己的數(shù)據(jù)。資源管理器:提供各種非程序代碼的資源讓應(yīng)用程序去使用。例如:本字符串、圖形文件或排版相關(guān)的布局文件。通知管理器:提供給用程序在狀態(tài)欄中顯示應(yīng)用程序自定義的提示信息?;顒?dòng)管理器:管理所有應(yīng)用程序的生命周期及提供常用的導(dǎo)航回退功能。例如:?jiǎn)?dòng)應(yīng)用程序要用到的資源準(zhǔn)備及關(guān)閉應(yīng)用程序時(shí)釋放內(nèi)存及相關(guān)資源等工作。視窗管理器:用來管理所有啟動(dòng)程序的視窗。位置管理器:用來管理地圖效勞的相關(guān)功能。(9)包管理器:管理所有安裝在Android系統(tǒng)內(nèi)的包。類庫在Android中包含一些C/C++的類庫,這些類庫能被Android系統(tǒng)中不同的組件來使用。開發(fā)者可以通過應(yīng)用程序框架使用這些功能。局部核心類庫列表如下:(DsurfaceManager:主要的功能是讓開發(fā)者可以去存取/顯示系統(tǒng)及管理的功能,在[顯示]與[存取操作]間的對(duì)應(yīng)、互動(dòng)以及實(shí)現(xiàn)無接縫的2D/3D多應(yīng)用程序之間的整合。例如:在2D、2D顯示上的合成、疊合動(dòng)作。3Dlibraries:主要是依openGLES1.0標(biāo)準(zhǔn)所定義的3D繪圖引擎。該庫使用硬件加速(當(dāng)硬件可用時(shí)),可以將硬件的3D功能做最正確化的處理顯示。SGL:主要是處理有關(guān)顯示2D方面的繪圖引擎。MediaFramework:主要是以packetvideo公司的OpenCORE為根底所開展的多媒體類庫,該庫支持回放和錄制大量流行的音視頻格式和靜態(tài)圖片。例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式FreeType:主要是用來顯示點(diǎn)陣圖和處理向量字形的。SSL:(secureSocketsuyer),中文名為"平安套接層協(xié)議層〃①認(rèn)證用戶和效勞器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和效勞器;②加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取;③維護(hù)數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中不被改變。SQLite:SQLite是一套開放性的關(guān)聯(lián)式資料庫,能夠被所有應(yīng)用程序使用的輕量級(jí)的關(guān)系數(shù)據(jù)庫引擎。webKit:是一個(gè)先進(jìn)的網(wǎng)頁瀏覽器引擎,被用來構(gòu)建Android瀏覽器和內(nèi)嵌的web視圖,也可以讓開發(fā)者利用這個(gè)引擎來做不同的應(yīng)用。libc:就是一個(gè)BSD標(biāo)準(zhǔn)C類庫。但是,針對(duì)Linux嵌入式裝置進(jìn)行過最正確化的調(diào)整。Android運(yùn)行時(shí)組件雖然Android是用Java語言來開發(fā)、撰寫應(yīng)用程序,但卻不使用Java運(yùn)行時(shí)組件來執(zhí)行Java程序,而是使用了由Google自行研發(fā)的Android運(yùn)行時(shí)組件來執(zhí)行程序°Android運(yùn)行時(shí)組件包括兩個(gè)重要的局部,一個(gè)是核心類庫,另一個(gè)是Dalvik虛擬機(jī)。2.3Android應(yīng)用的構(gòu)成和工作機(jī)制對(duì)于一個(gè)Android應(yīng)用程序來說,是由Activity、IntentReceiver、Service、ContentProvider四局部組成,但并不是每一個(gè)Android應(yīng)用程序都必須由這四局部組成。在應(yīng)用程序中使用時(shí),需要在配置文件AndroidManifest.xml中進(jìn)行配置。這個(gè)配置文件是每個(gè)Android應(yīng)用程序所必需的,用于定義應(yīng)用程序的組件、組件的功能以及必要條件等。Android應(yīng)用的構(gòu)成和工作流程如圖2-2:圖2-2Android的構(gòu)成和工作流程Android應(yīng)用程序結(jié)構(gòu)剖析Android的APIAndroidAPI主要包含了以下幾個(gè)局部:(1)AndroidManifest.xmlAndroidManifest.xml是系統(tǒng)的控制文件,它告訴系統(tǒng)如何處理所創(chuàng)立的所有應(yīng)用組件(尤其是活動(dòng)(Activity),效勞(Service),意圖接收器(IntentReceiver)和內(nèi)容提供者(ContentProvider))o舉例來說,控制文件就是把活動(dòng)和要接收的意圖(Intents)連接在一起的"膠水〃。⑵活動(dòng)活動(dòng)就是一個(gè)有生命周期的對(duì)象。一個(gè)活動(dòng)就是完成某些工作的代碼塊,這局部工作還可能包括對(duì)用戶UI界面的顯示。不過這不是必須的,有些活動(dòng)從不顯示UI界面。⑶視圖視圖可以將其自身繪制到屏幕上。Android的用戶界面由一系列的視圖樹構(gòu)成。接口都是由一組以樹的形式出現(xiàn)的視圖組成的。開發(fā)者可以通過創(chuàng)立一個(gè)新的視圖的方法來使用自定義的圖形處理技術(shù)(比方開發(fā)游戲,或者是使用了不常用的用戶圖形窗口界面)。⑷意圖意圖是一個(gè)簡(jiǎn)單的消息對(duì)象,它表示程序想做某事的“意圖〃。比方應(yīng)用程序想要顯示一個(gè)網(wǎng)頁,那么它可以通過創(chuàng)立一個(gè)Intent實(shí)例并將其傳遞給系統(tǒng)來表示意圖瀏覽這個(gè)URI。系統(tǒng)將定位到能處理這一Intent的代碼(在當(dāng)前情況下就是瀏覽器),并運(yùn)行之。意圖也可以用于播送系統(tǒng)范圍內(nèi)的有效事件(例如通知事件)。效勞效勞是運(yùn)行在后臺(tái)的一段代碼。它可以運(yùn)行在它自己的進(jìn)程,也可以運(yùn)行在其他應(yīng)用程序的進(jìn)程里,這取決于自身的需要?。其它的組件可以綁定到一個(gè)效勞上來,通過遠(yuǎn)程過程調(diào)用(RPC)來調(diào)用這個(gè)方法。例如媒體播放器的效勞,當(dāng)用戶退出媒體選擇的界面時(shí),仍然希望音樂依然可以繼續(xù)播放,這時(shí)就可用效勞來保證當(dāng)用戶界面關(guān)閉時(shí)音樂還繼續(xù)播放著。通知通知將以小圖標(biāo)的形式呈現(xiàn)在狀態(tài)欄里,用戶通過與圖標(biāo)的交互來接收消息。最常見的通知包括短信息、通話記錄和語音郵件,但是應(yīng)用程序也可以創(chuàng)立它們自己的通知事件。內(nèi)容提供者內(nèi)容提供者是用來提供對(duì)設(shè)備上數(shù)據(jù)進(jìn)行訪問。典型的例子就是使用內(nèi)容提供者來訪問聯(lián)系人列表。應(yīng)用程序也可以使用其它程序通過內(nèi)容提供者提供的數(shù)據(jù),同時(shí)也可以定義自己的內(nèi)容提供者來向其它應(yīng)用提供數(shù)據(jù)訪問效勞。Android應(yīng)用程序結(jié)構(gòu)解析通常由以下四個(gè)組件來構(gòu)建一個(gè)完整的Android應(yīng)用程序。活動(dòng)意圖接收器效勞內(nèi)容提供者然而,并不是所有的Android應(yīng)用程序都必須具備上面的四個(gè)組件,可以由上面的一個(gè)或幾個(gè)來組建。當(dāng)決定使用以上哪些組件來構(gòu)建Android應(yīng)用程序時(shí),需要將它們注冊(cè)在AndroidManifest.xml文件中,這是一個(gè)XML配置文件,在這個(gè)文件中可以聲明應(yīng)用程序組件以及它們的特性和要求。這個(gè)配置文件是每個(gè)Android應(yīng)用程序所必需的?;顒?dòng)活動(dòng)是以上四個(gè)組件中最常用的一個(gè)。每個(gè)活動(dòng)都是Activity的子類,并實(shí)現(xiàn)了一些獨(dú)有的功能,如管理UI顯示和UI的反應(yīng)事件。一個(gè)活動(dòng)就相當(dāng)于應(yīng)用程序的一個(gè)用戶界面,由事件響應(yīng)以及視圖等組成。大多數(shù)的應(yīng)用程序通常包括多個(gè)界面。例如:一個(gè)文本聊天應(yīng)用程序,至少應(yīng)該包含一個(gè)聯(lián)系人列表界面、一個(gè)聊天界面、一個(gè)設(shè)置界面、一個(gè)聊天記錄查詢界面等等。每個(gè)界面其實(shí)都可看作是一個(gè)活動(dòng)。顯示一個(gè)新界面就相當(dāng)于生成一個(gè)對(duì)應(yīng)的活動(dòng)對(duì)象。在一些情況下,活動(dòng)能夠返回給它的上級(jí)界面一個(gè)返回值,例如一個(gè)提供給用戶選擇照片的活動(dòng)可以返回給它的調(diào)用者用戶選擇了哪個(gè)照片文件。當(dāng)一個(gè)新的活動(dòng)出現(xiàn)時(shí),前一個(gè)活動(dòng)被中斷并被放入到一個(gè)歷史堆棧中。用戶可以使用返回鍵使前一個(gè)活動(dòng)重現(xiàn)。當(dāng)一個(gè)活動(dòng)不再需要時(shí),可以將它們從歷史堆棧中移除。默認(rèn)情況下,Android會(huì)為每個(gè)應(yīng)用程序保存從主界面開始的歷史堆棧。Android通過一個(gè)被稱作意圖的特殊類,來實(shí)現(xiàn)界面與界面之間的跳轉(zhuǎn)。一個(gè)意圖描述了一個(gè)應(yīng)用程序想要做什么。在意圖的描述結(jié)構(gòu)中,含有兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu):動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類型包括MAIN、VIEW、PICK、EDIT等等,而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)那么以URI的形式表示。例如:顯示一個(gè)聯(lián)系人信息的界面,可以創(chuàng)立一個(gè)意圖,并將它的動(dòng)作設(shè)置成VIEW,數(shù)據(jù)設(shè)置成表示這個(gè)人信息的URI。除此之外,還有一個(gè)被稱作意圖過濾器(IntentFiher)的相關(guān)類。當(dāng)發(fā)生一個(gè)有效的目的請(qǐng)求時(shí),意圖過濾器用來描述一個(gè)活動(dòng)能夠處理什么意圖。如上例中所描述,想要正常顯示一個(gè)聯(lián)系人信息的界面,必須聲明一個(gè)意圖過濾器,它說明當(dāng)有聯(lián)系人數(shù)據(jù)要被在界面上顯示時(shí),知道如何處理它們。通常意圖過濾器要被注冊(cè)在AndroidManifest.xml文件中。從一個(gè)界面跳轉(zhuǎn)到另一個(gè)界面是由解析各種意圖實(shí)現(xiàn)的。例如:一個(gè)活動(dòng)使用startActivity(myIntent)來調(diào)用其他活動(dòng)時(shí),系統(tǒng)會(huì)查找所有已經(jīng)安裝的應(yīng)用程序的意圖過濾器,并從中挑選出能夠匹配myIntent意圖的活動(dòng)。隨后,這個(gè)新的活動(dòng)接收到意圖(myIntent)的通知并開始運(yùn)行。當(dāng)startActivity方法被調(diào)用,解析意圖的處理過程隨之發(fā)生,這個(gè)機(jī)制有以下兩個(gè)突出的優(yōu)點(diǎn):活動(dòng)可以通過一個(gè)以意圖形式產(chǎn)生的請(qǐng)求來重用其他組件的功能?;顒?dòng)可以在任何時(shí)候被一個(gè)具有等價(jià)意圖過濾器的新活動(dòng)所替代。意圖接收器當(dāng)想要編寫代碼來對(duì)外部事件做一些處理時(shí),可以使用意圖接收器。意圖接收器并不顯示UI界面,它是通過NotificationManager來通知用戶他們感興趣的事件發(fā)生了。意圖接收器同樣可以被注冊(cè)在AndroidManifest.xml文件中,同時(shí)也可以在代碼中使用Context.registerReceiver()來注冊(cè)自己的意圖接收器。當(dāng)一個(gè)意圖接收器被觸發(fā)時(shí),系統(tǒng)會(huì)根據(jù)需要來啟動(dòng)應(yīng)用程序。效勞效勞是具有長(zhǎng)生命周期并且沒有用戶界面的代碼。內(nèi)容提供者在Android中,每個(gè)應(yīng)用程序都是有自己的userID及在自己的進(jìn)程中執(zhí)行。這樣做的好處是,可以保護(hù)系統(tǒng)及應(yīng)用程序,防止被其他不正常的應(yīng)用程序所影響。可以把每個(gè)進(jìn)程想像成是一個(gè)黑盒子,彼此不會(huì)互相影響,連內(nèi)存的資料都無法共享。如果應(yīng)用程序之間想要共享數(shù)據(jù),就需要使用用內(nèi)容提供者。一個(gè)內(nèi)容提供者就是一個(gè)類,它實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)的方法集合。其他的應(yīng)用程序可以使用這些方法來保存和檢索此內(nèi)容提供者處理過的數(shù)據(jù)。游戲功能背景介紹:功能介紹:益智類游戲是一種比擬流行的游戲,其畫面大都比擬簡(jiǎn)單,很少有很復(fù)雜的游戲特效,但是通常用到人工智能的算法來控制游戲的難度。本次游戲設(shè)計(jì)通過講解捉貓貓游戲在Android平臺(tái)上的設(shè)計(jì)與實(shí)現(xiàn),本次游戲的思想來源于天貓上的“捉貓貓〃活動(dòng)。隨著3G移動(dòng)網(wǎng)絡(luò)應(yīng)用的推廣, 游戲的規(guī)模、復(fù)雜程度日益增強(qiáng);其技術(shù)手段、設(shè)計(jì)思想、系統(tǒng)體系結(jié)構(gòu)都發(fā)生了深刻的變化。 操作系統(tǒng)正朝著高處理能力、多功能、智能化的方向開展。近年來,網(wǎng)絡(luò)文化市場(chǎng)開展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,我國(guó)網(wǎng)絡(luò)游戲市場(chǎng)開展迅速并進(jìn)入了一個(gè)高速增長(zhǎng)期,并已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動(dòng)了相關(guān)產(chǎn)業(yè)的開展。功能簡(jiǎn)介捉貓貓游戲的規(guī)那么很簡(jiǎn)單,只需要在屏幕上出現(xiàn)小貓時(shí),點(diǎn)中相應(yīng)的貓得到相應(yīng)的分?jǐn)?shù)即可。該游戲運(yùn)行步驟如下:?jiǎn)?dòng)游戲后首先進(jìn)入的便是游戲主界面,在主界面中有“關(guān)于游戲、游戲幫助、開始游戲、退出游戲〃四個(gè)欄目在主界面單擊“關(guān)于游戲〃才當(dāng)可進(jìn)入“關(guān)于〃界面,在〃關(guān)于〃界面中介紹了游戲的開發(fā)平臺(tái)、開發(fā)日期等資料。在菜單界面單擊“游戲幫助〃菜單可進(jìn)入“幫助〃界面,在“幫助〃界面中介紹了游戲的根本規(guī)那么。在主界面單擊“開始游戲〃菜單可進(jìn)入游戲界面。在游戲過程中有“暫停、繼續(xù)、離開〃三個(gè)功能按鈕,單擊相應(yīng)的按鈕進(jìn)入相應(yīng)的功能狀態(tài),其中“離開〃是指離開進(jìn)入主界面。當(dāng)玩家進(jìn)入游戲后,屏幕會(huì)出現(xiàn)不同的小貓,不同的小貓對(duì)應(yīng)不同的分?jǐn)?shù),點(diǎn)中后也會(huì)得到不同的分?jǐn)?shù)。游戲設(shè)有不同的關(guān)卡,每一關(guān)卡設(shè)置時(shí)間為1分鐘,而每一關(guān)需要相應(yīng)的分?jǐn)?shù)才能通關(guān),通關(guān)后進(jìn)入下一關(guān),在進(jìn)入下一關(guān)之前有三秒鐘的提示,關(guān)卡等級(jí)越高,難度越大。12.在主界面單擊退出游戲便可退出游戲。游戲籌劃及準(zhǔn)備工作游戲的籌劃:人類如果經(jīng)常動(dòng)用大腦,便可讓自身的邏輯和抽象思維能力得到增長(zhǎng),因此,玩數(shù)獨(dú)游戲就是一個(gè)增長(zhǎng)智慧的好方法,通過數(shù)獨(dú)題米的解答,可以讓頭腦變得更聰明,用戶可以吧她作為鍛煉邏輯思維及策略綠的工具,在上的實(shí)現(xiàn)便可以時(shí)時(shí)刻刻的開發(fā)思維,鍛煉頭腦,數(shù)獨(dú)的推理性強(qiáng),一些數(shù)學(xué)的思想、推理、假設(shè)、反正等都會(huì)用到,每個(gè)提米各不相同,不可能用一種方法解決所有問題,這也是數(shù)獨(dú)的魅力所在。開發(fā)這個(gè)游戲的目的是為讀者在Android平臺(tái)上進(jìn)行游戲開發(fā)提供一個(gè)指導(dǎo)方案,二不是聲場(chǎng)商業(yè)化的游戲,讀者可以以此為范例開發(fā)出更好、更具玩性的數(shù)獨(dú)游戲。Android平臺(tái)下游戲的準(zhǔn)備工作游戲的準(zhǔn)備工作通常根據(jù)游戲的籌劃來制作游戲所有的圖片、聲音等。因?yàn)楸居螒虿]有添加音效設(shè)置,所以只需要搜集或制作游戲過程中所有得到的圖片資源即可,本游戲用到的圖片文件資源。游戲的架構(gòu)在正式開放代碼之前,首先需要對(duì)該游戲的設(shè)計(jì)框架進(jìn)行簡(jiǎn)要介紹,以幫助讀者更好的理解游戲的開放過程,希望讀者能夠仔細(xì)閱讀本節(jié)的內(nèi)容,在整體上了解本游戲。這會(huì)為之后的開發(fā)帶來事半功倍的效果。接下來將通過游戲的運(yùn)行過程介紹各類在游戲中的作用,具體運(yùn)行的步驟如下:?jiǎn)?dòng)游戲后,首先在KLSDActivity中初始化ZhuView,然后將用戶界面切換到主動(dòng)畫ZhuView.而在ZhuView中會(huì)啟動(dòng)ZhuViewDrawThread與ZhuGoThread來刷新界面和生成主動(dòng)畫?!?〕當(dāng)玩家單擊〃幫助〃菜單式,會(huì)創(chuàng)立HelpView,是顯示〃幫助〃界面。(4)當(dāng)玩家單擊〃關(guān)于〃菜單式,會(huì)創(chuàng)立AboutView顯示〃關(guān)于〃界面。⑸黨單擊〃開始游戲〃時(shí)那么正式進(jìn)入游戲界面GamneView,同時(shí)啟動(dòng)GameViewDrawThread來刷新界面。各類的簡(jiǎn)要介紹為了讓讀者更好的理解后面的代碼,下面將對(duì)游戲的各個(gè)累逐一進(jìn)行簡(jiǎn)要說明,關(guān)于這些類的詳細(xì)代碼將在后面的章節(jié)中相繼給出。為了讓讀者更好地理解后面的代碼,下面將對(duì)游戲中的各個(gè)類逐一簡(jiǎn)要說明。關(guān)于這些累的詳細(xì)代碼將在后面的章節(jié)中相繼給出。共有類SudukuActivity類該類是通過集成和擴(kuò)展類Activity來實(shí)現(xiàn)的,是整個(gè)應(yīng)用程序的入口,主要是根據(jù)收到的Handler消息的不同切換到不同的界面。歡送界面相關(guān)類該類為歡送界面的實(shí)現(xiàn)類,主要負(fù)責(zé)歡送動(dòng)畫界面的繪制,是歡送界面的前臺(tái)顯示的實(shí)戰(zhàn)Android變成 手把手教你作出商用軟件。View,根據(jù)后臺(tái)數(shù)據(jù)的不同繪制不同效果的動(dòng)畫。(1〕WelcomeViewDrawThread類該類為歡送動(dòng)畫界面的效勞線程,主要負(fù)責(zé)歡送動(dòng)畫的生成,通過改變表示當(dāng)前幀的索引值到達(dá)動(dòng)畫的效果?!?〕關(guān)于界面AboutView類該類是游戲幫助界面的實(shí)現(xiàn)類,主要負(fù)責(zé)游戲幫助界面的繪制。游戲界面相關(guān)類GameView類GameView類是游戲中最主要的一個(gè)類。游戲規(guī)那么、游戲模型都包含在此類當(dāng)中,同時(shí)該類還負(fù)責(zé)繪制游戲的畫面、接收玩家的響應(yīng)。〔1〕GameViewDrawthread類GameViewDrawthread類負(fù)責(zé)定時(shí)的刷幀操作。〔2〕刷新時(shí)間縣城TimeThread類該線程的實(shí)現(xiàn)非常簡(jiǎn)單,只是定時(shí)改變游戲模型中的實(shí)間值,并不負(fù)責(zé)其他事件的處理。〔3〕數(shù)字鍵盤渲染線程DrawKeythread類該線程的作用是數(shù)字鍵盤圖片頭明度即可?!?〕數(shù)獨(dú)生成器ShuDuSuanFa類該類是個(gè)普通的Java類,不繼承任何類,只為游戲隨機(jī)提供存放熟讀數(shù)字的二維數(shù)組,該類所采用算法的優(yōu)劣決定了該游戲可玩性的好壞。系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)結(jié)構(gòu)設(shè)計(jì)圖設(shè)計(jì)流程圖設(shè)計(jì)思想1.按照程序運(yùn)行的順序介紹各個(gè)類的作用以及整體的運(yùn)行框架,步驟如下:啟動(dòng)游戲,首先被創(chuàng)立的是游戲的主界面,而在主界面如圖。圖界面應(yīng)用程序的每個(gè)屏幕的顯示都要通過繼承和擴(kuò)展基類Activity類來實(shí)現(xiàn),鐘重寫Activity類的onCreat()方法,在onCreat()方法中做游戲的初始化工作,該類代碼以下:publicclassKLSDActivityextendsActivity{WelcomeViewwelcomeview;//歡送動(dòng)畫界面的引用GameViewgameView;//游戲界面的引用AboutViewaboutView;//關(guān)于界面HelpViewhelpView;//幫助界面HandlermyHandler=newHandler(){//用來更新UI線程中的控件publicvoidhandleMessage(Messagemsg){if(msg.what==1){//歡送界面發(fā)送的消息if(welcomeView!=null){welcomeView=null;}initGameView();KLSDActivity.this.setContentView(gameView);}elseif(msg.what==2){//游戲勝利或者失敗時(shí)點(diǎn)擊屏幕if(gameView!=null){gameView=null;}initWelcomeView();//初始化歡送界面KLSDActivity.this.setContentView(welcomeView);//切換到歡送界面}elseif(msg.what==3){initAboutView();KLSDActivity.this.setContentView(aboutView);//切換到關(guān)于界面}elseif(msg.what==4){initHelpView();KLSDActivity.this.setContentView(helpView);//切換到幫助界面}}};publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//設(shè)置全屏requestWindowFeature(Window.FEA.TURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);initWelcomeView();//初始化歡送界面this.setContentView(welcomeView);//切換到歡送界面}publicvoidinitWelcomeView(){//初始化歡送界面welcomeView=newWelcomeView(this);}publicvoidinitGameView(){//初女臺(tái)化游戲界面gameView=newGameView(this);}publicvoidinitAboutView(){//初始化關(guān)于界面aboutView=newAboutView(this);}publicvoidinitHelpView(){//初女臺(tái)化幫助界面helpView=newHelpView(this);}}當(dāng)用戶單擊“關(guān)于〃菜單時(shí),將進(jìn)入幫助界面,菜單按鈕時(shí),新界面進(jìn)入。當(dāng)用戶單擊“幫助〃菜單時(shí),將進(jìn)入幫助界面,該界面實(shí)現(xiàn)較簡(jiǎn)單,只需將圖片繪制到指定位置,然后繪制以下〃確定〃按鈕即可,代碼如下publicclassShuDuSuanFa{int[][]n=newint[9][9];//存儲(chǔ)數(shù)字的數(shù)組 int[]num={1,2,3,4,5,6,7,8,9};〃生成隨機(jī)數(shù)字的源數(shù)組,隨機(jī)數(shù)字從該數(shù)組中產(chǎn)生publicbooleancheckLine(intcol){//檢查歹0是否符合要求for(intj=0;j<8;j++){if(n[j][col]==0){continue;}for(intk=j+1;k<9;k++){if(n[j][col]==n[k][col]){returnfalse;} }}returntrue;}publicbooleancheckNine(introw,intcol){//檢查3X3區(qū)域是否符合要求intj=row/3*3;//獲得左上角的坐標(biāo)intk=col/3*3;for(inti=0;i<8;i++){//循環(huán)比擬if(n[j+i/3][k+i%3]==0){continue;}for(intm=i+1;m<9;m++){if(n[j+i/3][k+i%3]==n[j+m/3][k+m%3]){returnfalse}}}returntrue;}publicbooleancheckRow(introw){//檢查行是否符合要求for(intj=0;j<8;j++){if(n[row][j]==0){continue;}for(intk=j+1;k<9;k++){if(n[row][j]==n[row][k]){returnfalse;}}}returntrue;}publicintgenerateNum(introw,intcol,inttime){//產(chǎn)生1-9之間的隨機(jī)數(shù)字if(time==0){//第一次嘗試時(shí),初始化隨機(jī)數(shù)字源數(shù)組for(inti=0;i<9;i++){num[i]=i+1; }}//第10次填充,說明該位置已經(jīng)卡住,那么返回0,由主程序處理退回if(time==9){return0;}//不是第一次填充//生成隨機(jī)數(shù)字,該數(shù)字是數(shù)組的下標(biāo),取數(shù)組皿中該下標(biāo)對(duì)應(yīng)的數(shù)字為隨機(jī)數(shù)字intranNum=(int)(Math.random()*(9-time));//把數(shù)字放置在數(shù)組倒數(shù)第time個(gè)位置,inttemp=num[8-ranNum];num[8-ranNum]=num[ranNum];num[ranNum]=temp;returnnum[8-ranNum]; }publicint[][]getShuDu(){//生成數(shù)字for(inti=0;i<9;i++){inttime=0;//嘗試填充的數(shù)字次數(shù) for(intj=0;j<9;j++){〃填充數(shù)字n[i][j]=generateNum(i,j,time);//如果返回值為0,那么代表卡住,退回處理if(n[i][j]==0){if(j>0){//不是第一列,那么倒退一列j-=2;continue;}else{//是第一列,那么倒退到上一行的最后一列i--;j=8;continue;}}if(isCorret(i,j)){〃成功time=0;}else{time++;j--; }}}returnn; }publicbooleanisCorret(introw,intcol){//是否滿足行、歹0和九宮區(qū)域不重復(fù)的要求return(checkRow(row)&checkLine(col)&checkNine(row,col));}}當(dāng)用戶單擊“開始〃菜單時(shí),將進(jìn)入幫助界面,菜單按鈕時(shí),新界面進(jìn)入。游戲開始:此界面含有暫停、提示、換題、放棄。圖游戲開始publicclassGameViewextendsSurfaceViewimplementsSurfaceHolder.Callback{KLSDActivityactivity;//activity的弓丨用intalpha=100;//透明度floatspan=(float)1;//難度(1-10)intstatus=0;//0游戲中,1暫停中,2游戲勝利,3游戲失敗inttime=0;//時(shí)間booleantishi;//是否提示Bitmapbackground;//大背景Bitmapsmallbackgroud;//背景方格Bitmapstop;//暫停按鈕Bitmapchange;//換題按鈕Bitmapdrop;//放棄按鈕Bitmaphelp;//提示按鈕Bitmapgo_on;//暫停圖像BitmapkeyDown;//選中后單元格樣式Bitmapwin;//勝利Bitmapfail;//失敗Bitmapselect;//選中的單元格BitmaptimeBitmap;//時(shí)間中間的冒號(hào)Bitmapheart;//有提示時(shí)候畫的Bitmapexit;//是否退出圖片Bitmapkey_background;//數(shù)字按鍵背景Bitmapkey_bitmap;//小數(shù)字鍵盤Bitmap[]number_bitmap=newBitmap[10];//默認(rèn)的數(shù)字圖片Bitmap[]number_input=newBitmap[10];//輸入的數(shù)字圖片Bitmap[]time_bitmap=newBitmap[10];//時(shí)間Paintpaint;booleandrawkey=false;int[][]num;//用來裝生成的數(shù)字即正確答案int[][]inputNum;//用來存放輸入的數(shù)字int[][]outputNum;//用來存放系統(tǒng)的數(shù)字floatscale=(float)0.8;//數(shù)字鍵盤上數(shù)字縮放的比例Bitmap】]small_number;intr=39;//數(shù)字鍵盤小圓圈的半徑intkeyx;intkeyy;//數(shù)字鍵盤的位置intdownx;intdowny;ShuDuSuanFasdsf;//生成數(shù)獨(dú)的算法類TimeThreadtt;//時(shí)間線程GameViewDrawThreadgameViewDrawThread;publicGameView(KLSDActivityactivity){super(activity);this.activity=activity;getHolder().addCallback(this);//添力口Ca丄丄back接口的實(shí)現(xiàn)init();gameViewDrawThread=newGameViewDrawThread(this);}publicvoidinit(){paint=newPaint();//初始化圓筆background=BitmapFactory.d^ecod^eResource(getResources(),R.drawable.background);//初始化背景小方格圖元small_backgroud=BitmapFactory.decodeResource(getResources(),R.drawable.small_background);//初始化下面的四個(gè)按鈕stop=BitmapFactory.decodeResource(getResources(),R.drawable.stopl);//停止change=BitmapFactory.decodeResource(getResources(),R.drawable.changel);//換題drop=BitmapFactory.decodeResource(getResources(),R.drawable.dropl);//放棄help=BitmapFactory.decodeResource(getResources(),R.drawable.helpl);//提示key_background=BitmapFactory.decodeResource(getResources(),R.drawable.key_background);3.當(dāng)用戶單擊“暫?!ú藛螘r(shí),就進(jìn)入“暫停中〃oOOOOKLSDActivityactivity;//activity的弓I用WelcomeViewDrawThreadwelcomeViewDrawThread;//刷幀線程WelcomeViewGoThreadwelcomeViewGoThread;//動(dòng)畫生成線程int[]bitmapsID=newint[](//圖片IDBitmap]]bitmaps;//圖片數(shù)組Bitmap]]menuBitmap=newBitmap[4];intdrawindex=0;//當(dāng)前繪制第幾幀
booleandrawString=false;//是否繪制文
字intstatus=0;//0歡送狀態(tài),1菜單狀態(tài)Paintpaint;//畫筆Paintpaint2;publicWelcomeView(KLSDActivityactivity)(//構(gòu)造器super(activity);this.activity=activity;//得到
activity的引用
getHolder().addCallback(this);//添加Callback接口的實(shí)現(xiàn)
initBitmap();//調(diào)用初始化方法
welcomeViewDrawThread=new
WelcomeViewDrawThread(this);welcomeViewGoThread=new
WelcomeViewGoThread(this);}
publicvoidinitBitmap()(//初始化圖片方
法paint=newPaint();paint2=newPaint();paint2.setAlpha(125);paint,setColor(Color,WHITE);paint.setAntiAlias(true);//翻開抗鋸齒paint.setTextSize(18);bitmaps=newBitmap[bitmapsID.length];for(inti=0;i<bitmaps.length;i++){bitmaps[i_=BitmapFactory,decodeResource(getResources
(),bitmapsID[i]);}Bitmapbitmap=BitmapFactory,decodeResource(getResources
(),R.drawable.menu);for(inti=0;i<menuBitmap.length;
i++){//切成小圖片menuBitmap[i]=Bitmap.createBitmap(bitmap,0,(bitmap?getHeight()/menuBitmap?length)*i,bitmap.getWidth(),(bitmap.getHeight()/menuBitmap.length));bitmap=null;//釋放掉大圖 }protectedvoidonDraw(Canvascanvas)(//繪制方法super.onDraw(canvas);canvas.drawColor(Color.BLACK);//清背景canvas,drawBitmap(bitmaps[drawIndex],0,100,paint);if(status==0)(
if(drawString){
canvas.drawText(〃點(diǎn)擊屏幕繼
續(xù)???〃,103,380,paint);}}elseif(status==1)(//菜單狀態(tài)時(shí)canvas.drawRect(0,0,320,480,paint2);for(inti=0;i<menuBitmap.length;i++){canvas.drawBitmap(menuBitmap[i],60,130+50*i,null);}))publicbooleanonTouchEvent(MotionEventevent){//屏幕監(jiān)聽方法if(event.getAction()==MotionEvent.ACTION_DOWN){//屏幕被按下事件doublex=event.getX();doubley=event.getY();if(status==0){status=1;}elseif(status==1){if(x>60&&x<260&&y>130&&y<160){〃開始游戲activity,myHandler,sendEmptyMessage(1);}elseif(x>60&&x<260&&y>180&&y<210){〃關(guān)于游戲activity.myHandler.sendEmptyMessage(3);}elseif(x>60&&x<260&&y>230&&y<260)(//幫助游戲activity.myHandler.sendEmptyMessage(4);}elseif(x>60&&x<260&&y>280&&y<310)(//退出游戲System.exit(0);//直接退出游戲}} }returnsuper.onTouchEvent(event);}publicvoidsurfaceChanged(SurfaceHolderarg0,intargl,intarg2,intarg3){}publicvoidsurfaceCreated(SurfaceHolderarg0)(welcomeViewDrawThread,setFlag(true);//設(shè)置循環(huán)標(biāo)志位welcomeViewGoThread,setFlag(true);welcomeViewDrawThread.start();//啟動(dòng)線程welcomeViewGoThread.start();//啟動(dòng)線程}publicvoidsurfaceDestroyed(SurfaceHolderarg0)(booleanretry=true;//循環(huán)標(biāo)志位welcomeViewDrawThread,setFlag(false);//設(shè)置循環(huán)標(biāo)志位
welcomeViewGoThread.setFlag(false);while(retry)(//循環(huán)try(welcomeViewDrawThread?join();//得到線程結(jié)束welcomeViewGoThread?join();//得到線程結(jié)束retry=false;}catch(Exceptione)(//不斷地循環(huán),直到刷幀線程結(jié)束e.printStackTrace();})}}當(dāng)用戶單擊“換題〃菜單時(shí),將進(jìn)入幫助界面,菜單按鈕時(shí),新界面進(jìn)入。publicclassWelcomeViewGoThreadextendsThread{WelcomeViewwelcomeView;//welcomeView的弓丨用privateintsleepSpan=150;privatebooleanflag=true;//循環(huán)標(biāo)記位publicWelcomeViewGoThread(WelcomeViewwelcomeView){//構(gòu)造器this.welcomeView=welcomeView;//得到welcomeView的弓丨用}publicvoidrun(){//重寫的run方法法while(flag){//循環(huán)welcomeView.drawIndex++;//自力口if(welcomeView.drawIndex>welcomeView.bitmapsID.length-1){welcomeView.drawIndex=welcomeView.bitmapsID.length-10;}if(welcomeView.drawIndex%5==0){welcomeView.drawString=!welcomeView.drawString;}try{Thread.sleep(sleepSpan);//睡眠}catch(Exceptione){e.printStackTrace();//打印異常信息}}}publicvoidsetFlag(booleanflag){//循環(huán)標(biāo)志位的設(shè)置方法this.flag=flag;}}當(dāng)用戶單擊“放棄〃菜單時(shí),將進(jìn)入幫助界面,菜單按鈕時(shí),重新開始。canvas.drawBitmap(stop,150,380,paint);canvas.drawBitmap(change,230,380,paint);canvas.drawBitmap(drop,150,420,paint);canvas.drawBitmap(help,230,420,paint);if(status==2){//游戲勝利tt.flag=false;canvas.drawBitmap(win,40,160,paint);}elseif(status==3){//游戲失敗tt.flag=false;canvas.drawBitmap(fail,80,180,paint);}elseif(status==4){//是否退出canvas.drawBitmap(exit,70,180,paint);}elseif(status==0){//游戲中if(tishi==true){canvas.drawBitmap(heart,10,340,paint);}//畫全部數(shù)字tt.flag=true;intx;inty;for(inti=0;i<9;i++){for(intj=0;j<9;j++){x=16+28*j;y=35+29*i;if(j>=3&&j<6){x+=20;}if(j>=6){x+=42;}if(i>=3&&i<6){y+=18;}if(i>=6){y+=34;}canvas.drawBitmap(number_bitmap[outputNum[i][j]],x,y,paint);}}//畫用戶輸入的數(shù)字for(inti=0;i<9;i++){for(intj=0;j<9;j++){x=16+28*j;y=35+29*i;if(j>=3&&j<6){x+=20;}if(j>=6){x+=42;}if(i>=3&&i<6){y+=18;}if(i>=6){y+=34;}canvas.drawBitmap(number_input[inputNum[i][j]],x,y,paint);}計(jì)時(shí)器線程的開發(fā)TimeThread類的實(shí)現(xiàn)比擬簡(jiǎn)單,只需每一秒更改以下GameView中表示時(shí)間的屬性即可,代碼如下:publicclassTimeThreadextendsThread{GameViewgameView;//聲明GameView的引用booleanflag=true;//循環(huán)標(biāo)志位publicTimeThread(GameViewgameView){//構(gòu)造器this.gameView=gameView;//得到^GameView的弓丨用}publicvoidrun(){//重寫的run方法while(flag){gameView.time++;//時(shí)間自力口try{Thread.sleep(1000);//睡眠一秒種}catch(Exceptione){//捕獲異常e.printStackTrace();//打印異常信息}}}}數(shù)獨(dú)生成器開發(fā)本節(jié)將對(duì)數(shù)組的生成器ShuDuSuanFa進(jìn)行開發(fā),該類根本上是數(shù)學(xué)計(jì)算,通過一定的算法產(chǎn)生的需要的數(shù)獨(dú)數(shù)組,通過特定的接口供給其他類使用。該類產(chǎn)生的數(shù)組是矩陣圖,是矩陣圖的每一行、每列、每塊都沒有重富的數(shù)字,算法的簡(jiǎn)單思路是先取出一個(gè)0-9的數(shù)字,然后檢查其搜在的行、列、塊是否要符合要求,當(dāng)填充符合是要繼續(xù)填充下一個(gè),而當(dāng)不符合時(shí),再次隨機(jī)取出一個(gè)沒有取出的數(shù)字,在判斷。接下來對(duì)類進(jìn)行詳細(xì),步驟如下:ublicclassShuDuSuanFa{int[][]n=newint[9][9];〃存儲(chǔ)數(shù)字的數(shù)組 int[]num={1,2,3,4,5,6,7,8,9};〃生成隨機(jī)數(shù)字的源數(shù)組,隨機(jī)數(shù)字從該數(shù)組中產(chǎn)生publicbooleancheckLine(intcol){//檢查歹0是否符合要求for(intj=0;j<8;j++){if(n[j][col]==0){continue;}for(intk=j+1;k<9;k++){if(n[j][col]==n[k][c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)意農(nóng)業(yè)面試題目及答案
- 反饋技巧測(cè)試題及答案
- 微量泵的應(yīng)用試題及答案
- 2024年紡織品檢驗(yàn)員疑難解析試題及答案
- 2024年紡織品設(shè)計(jì)師證書試題及答案的前沿趨勢(shì)試題及答案
- 民用航空概論試題及答案
- 后廚燃?xì)獍踩囶}及答案
- 國(guó)際美術(shù)設(shè)計(jì)師考試中的視覺創(chuàng)新方法試題及答案
- 建筑識(shí)圖測(cè)試題及答案
- 淺析國(guó)際美術(shù)設(shè)計(jì)師考試的試題及答案
- 全球汽車產(chǎn)業(yè)發(fā)展現(xiàn)狀與趨勢(shì)
- T-COFA 0021-2022 漁用油電混合多旋翼無人機(jī)安全檢查和維 護(hù)保養(yǎng)要求
- 2025貴州畢節(jié)市七星關(guān)區(qū)招聘城市社區(qū)工作者186人筆試備考題庫及答案解析
- 2025屆河北省“五個(gè)一”名校聯(lián)盟高三下學(xué)期4月聯(lián)考化學(xué)試題(含答案)
- 山東省泰安市2025屆高三二輪模擬檢測(cè)考試政治(泰安二模)(含答案)
- 2025-2030中國(guó)環(huán)境監(jiān)測(cè)發(fā)展分析及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 2025年教師資格證面試結(jié)構(gòu)化模擬題:教師心理健康維護(hù)試題集
- 大疆精靈4 RTK無人機(jī)操作與測(cè)繪培訓(xùn)指南
- 2025屆江蘇省南京一中高三第二次模擬考試物理試卷含解析
- 初中語文第16課《有為有不為》課件-2024-2025學(xué)年統(tǒng)編版語文七年級(jí)下冊(cè)
- 2025年內(nèi)蒙古化工職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫必考題
評(píng)論
0/150
提交評(píng)論