(90916P28梁澤允)畢業(yè)設(shè)計(jì)畢業(yè)論文_第1頁
(90916P28梁澤允)畢業(yè)設(shè)計(jì)畢業(yè)論文_第2頁
(90916P28梁澤允)畢業(yè)設(shè)計(jì)畢業(yè)論文_第3頁
(90916P28梁澤允)畢業(yè)設(shè)計(jì)畢業(yè)論文_第4頁
(90916P28梁澤允)畢業(yè)設(shè)計(jì)畢業(yè)論文_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

南京信息職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)論文作者梁澤允學(xué)號(hào)90916P28系部計(jì)算機(jī)與軟件學(xué)院專業(yè)軟件技術(shù)(移動(dòng)應(yīng)用開發(fā))題目基于Android的電子書閱覽器的設(shè)計(jì)與實(shí)現(xiàn)指導(dǎo)教師李維勇評(píng)閱教師完成時(shí)間:2021年5月15日畢業(yè)設(shè)計(jì)(論文)中文摘要題目:基于Android的電子書閱覽器的設(shè)計(jì)與實(shí)現(xiàn)摘要:隨著生活節(jié)奏的加快和技術(shù)的開展以及移動(dòng)設(shè)備的普及,特別是Android正以前所未有的速度開展,越來越多的創(chuàng)意被應(yīng)用到Android應(yīng)用程序的開發(fā)中。本設(shè)計(jì)是基于Android開發(fā)環(huán)境而設(shè)計(jì)的,采用Java語言、設(shè)計(jì)了一款基于SQLite數(shù)據(jù)庫的Android電子書閱讀器。本文首先闡述了電子書閱覽器的工程的背景及其工程的研究意義,然后對(duì)電子閱覽器的系統(tǒng)進(jìn)行需求分析,主要是通過用例圖對(duì)系統(tǒng)需求進(jìn)行解析;其次是系統(tǒng)的總體設(shè)計(jì),總體設(shè)計(jì)分為功能模塊的設(shè)計(jì)、數(shù)據(jù)庫的設(shè)計(jì),功能模塊的設(shè)計(jì)利用系統(tǒng)流程圖和時(shí)序圖對(duì)模塊設(shè)計(jì)進(jìn)行解析;第三局部是對(duì)系統(tǒng)的總體設(shè)計(jì),此局部主要是對(duì)各模塊功能是如何實(shí)現(xiàn)的和一些實(shí)現(xiàn)的重要代碼做詳細(xì)的說明;最后一局部是對(duì)系統(tǒng)進(jìn)行測(cè)試,通過設(shè)計(jì)測(cè)試案例和如何來對(duì)功能測(cè)試進(jìn)行描述來完成測(cè)試,書寫測(cè)試結(jié)果。論文給出基于Android開發(fā)的電子書閱覽器的開發(fā)實(shí)例,主要的功能有在SDCard中找書;給書添加書簽、選擇書簽、清空書簽;設(shè)置讀書時(shí)候的自動(dòng)翻頁的時(shí)間;設(shè)置文字的大小、顏色、書的背景圖片和背景音樂。不僅簡(jiǎn)單方便,還給用戶帶來很好的閱讀體驗(yàn)。關(guān)鍵詞:Android電子書閱覽器畢業(yè)設(shè)計(jì)(論文)外文摘要Title:Abstract:Withtheacceleratedpaceoflifeandtechnologyexhibitionandthemobilephonepopularityofmobiledevices,particularlyAndroidisahithertounknowninthespeedofdevelopment,moreandmoreideasareappliedtotheAndroidapplicationdevelopment,thedesignisadesignbasedonAndroidelectronicreadingdevicerealize.ThedesignisbasedontheAndroiddevelopmentenvironmentanddesign,usingJavalanguage,designaSQLdatabase.Thisarticlefirstelaboratedtheelectronicreadingdeviceoftheprojectbackgroundandresearchsignificance,andthentheelectronicreadingdeviceofthesystemneedsanalysis,primarilythroughtheusecasediagramofsystemdemandanalysis;thesecondistheoveralldesignofthesystem,theoveralldesignisdividedintothefunctionmoduledesign,databasedesign,functionmoduledesignutilizationsystemflowdiagramandsequencediagramofmoduledesignanalysis;thethirdpartoftheoveralldesignofthesystem,thispartismainlyonthefunctionofeachmodulecanbeimplementedandachievedsomeimportantcodetodothedetailedexplanation;thelastpartiscarriesonthetesttothesystem,throughthedesignoftestcaseandhowtofunctiontestdescriptionoftest,writtentestresults.Thispapergivetheelectronicreadingdevicedevelopmentexample,themainfunctionisfoundinthesdcardbook;giveabookaddbookmarks,choosetobookmark,emptythebookmark;whentheautomaticpageturningtime;setthesizeofthefont,color,thebackgroundpictureandbackgroundmusic.Notonlyissimpleandconvenient,backtothegoodoftheuserexperienceofreading.keywords:AndroidElectronicreadingReadingdevice目錄TOC\o"1-2"\h\z\u1 緒論 11.1 課題的背景 11.2 工程的研究意義 21.3 系統(tǒng)的主要技術(shù) 22 需求分析 92.1 應(yīng)用需求分析 92.2 開發(fā)環(huán)境與工具 133 系統(tǒng)總體設(shè)計(jì) 153.1 功能模塊設(shè)計(jì) 153.2 數(shù)據(jù)庫設(shè)計(jì) 174 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 194.1 歡迎界面的實(shí)現(xiàn) 194.2 找書功能的實(shí)現(xiàn) 204.3 書簽功能模塊的實(shí)現(xiàn) 214.4 設(shè)置功能模塊的實(shí)現(xiàn) 255 測(cè)試 295.1 系統(tǒng)測(cè)試 295.2 系統(tǒng)運(yùn)行 33結(jié)論 36致謝 37參考文獻(xiàn) 38緒論傳統(tǒng)的電子書閱讀器是將要讀取的內(nèi)容轉(zhuǎn)成txt格式的文件,通過文件流讀出,并在相應(yīng)的控件上進(jìn)行顯示。但這只適用于一些內(nèi)容短小的文本,對(duì)于一些內(nèi)容龐大復(fù)雜的文本,如各類文學(xué)名著等,因其分卷多,每卷中又有章、章中又有節(jié),簡(jiǎn)單的閱讀器顯然不能滿足翻頁、查找等功能。而本設(shè)計(jì)即可實(shí)現(xiàn)翻頁、查找等功能而且具有操作簡(jiǎn)單、界面友善、靈活性好、系統(tǒng)平安性高、運(yùn)行穩(wěn)定等特點(diǎn)。課題的背景電子書閱覽器是現(xiàn)在青少年以及中年人不可缺少的,然而普通的閱覽器滿足不了現(xiàn)在青少年的閱讀體驗(yàn),本設(shè)計(jì)就是從這點(diǎn)出發(fā),盡可能的滿足除閱讀功能之外還具有其它特效功能,給用戶一個(gè)更好的閱讀體驗(yàn)。普通的閱讀器只是具有閱讀電子書的功能。用戶在閱讀的過程中可能會(huì)有點(diǎn)枯燥乏味而影響閱讀的心情,還有可能因?yàn)橄到y(tǒng)自身的局限性不能對(duì)很大的文字進(jìn)行加載閱讀?;谝陨系脑虮驹O(shè)計(jì)的電子書閱讀器的閱讀界面一般設(shè)計(jì)依舊比較簡(jiǎn)潔,沒有復(fù)雜的導(dǎo)航條,簡(jiǎn)潔的界面增強(qiáng)了閱讀的真實(shí)感,隱藏的菜單欄為閱讀器提供了豐富的功能支持,讓使用者在充分享受類似閱讀紙質(zhì)圖書快樂的同時(shí)體驗(yàn)到應(yīng)用的酷炫的效果。因?yàn)槭腔贏ndroid的開發(fā),本設(shè)計(jì)的平安性、運(yùn)行的穩(wěn)定性更好;該設(shè)計(jì)不僅界面的上優(yōu)化,本設(shè)計(jì)還具有對(duì)閱讀文章進(jìn)行添加書簽功能,更好的方便用戶下次閱讀重新翻閱的功能;在智能化方面,本電子閱覽器可以自動(dòng)翻頁,可根據(jù)個(gè)人閱讀的快慢進(jìn)行設(shè)置,大大減少了客戶在閱讀時(shí)需要手動(dòng)翻頁的煩惱;在閱讀體驗(yàn)方面,本設(shè)計(jì)更是突出它優(yōu)越的特點(diǎn),不僅可以對(duì)字體顏色、大小進(jìn)行調(diào)節(jié),還可以更換閱讀的背景圖片及對(duì)背景音樂進(jìn)行設(shè)置,這樣大大給用戶帶來了閱讀時(shí)候的愉悅感。本文主要闡述了在Android平臺(tái)上十分流行的電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn),具有在SDCard中找書,自動(dòng)翻頁特效,給電子書添加書簽,閱讀字體調(diào)節(jié),背景圖片和音樂的實(shí)現(xiàn)等功能,本文詳細(xì)討論了應(yīng)用程序的系統(tǒng)邏輯結(jié)構(gòu),體系結(jié)構(gòu),功能模塊和設(shè)計(jì)流程,以及實(shí)現(xiàn)該設(shè)計(jì)的代碼。最后是對(duì)該設(shè)計(jì)進(jìn)行測(cè)試的工作。工程的研究意義隨著人們生活節(jié)奏的不斷加快,以其方便快捷的優(yōu)點(diǎn),逐漸成為人們?nèi)粘I畋夭豢缮俚耐ㄓ嵐ぞ?。隨著人們對(duì)娛樂功能要求的不斷提高,各種應(yīng)用軟件層出不窮,其中基于Android平臺(tái)電子書閱覽器軟件的開發(fā)可以進(jìn)一步滿足青少年,能夠幫助人們更加合理地利用時(shí)間,在休閑娛樂的同時(shí)獲取知識(shí),成為用戶生活的小助手,有很大的市場(chǎng)價(jià)值。系統(tǒng)的主要技術(shù)系統(tǒng)設(shè)計(jì)主要用的技術(shù)有Android,Java語言、SQLite數(shù)據(jù)庫的使用。在軟件的開發(fā)過程中運(yùn)用到的集成開發(fā)環(huán)境是Eclipse。在軟件的設(shè)計(jì)過程中運(yùn)用UML的用例對(duì)系統(tǒng)進(jìn)行分析。Android簡(jiǎn)介Android一詞的本義指“機(jī)器人〞,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋果公司的iOS以及RIM的BlackberryOS。2021年第一季度,Android在全球的市場(chǎng)份額首次超過塞班系統(tǒng),躍居全球第一。2021年2月數(shù)據(jù),Android占據(jù)全球智能操作系統(tǒng)市場(chǎng)52.5%的份額,中國(guó)市場(chǎng)占有率為68.4%。Android是以Linux為核心的操作平臺(tái),作為一款開放式的操作系統(tǒng),隨著Android的快速開展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應(yīng)用程序,也可以通過NDK使用C/C++作為編程語言來開發(fā)應(yīng)用程序,也可使用SL4A來使用其他各種腳本語言進(jìn)行編程〔如:python、lua、tcl、php等等〕,還有其他諸如:Qt〔qtforandroid〕、Mono〔monoforandroid〕等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發(fā)者還可以使用C#作為編程語言來開發(fā)應(yīng)用程序。另外,谷歌還在2021年特別發(fā)布了針對(duì)初學(xué)者的AndroidSimple語言,該語言類似Basic語言。而在網(wǎng)頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持Android開發(fā)。而在Android系統(tǒng)底層方面,Android使用C/C++作為開發(fā)語言。Android系統(tǒng)的優(yōu)勢(shì):〔1〕開放性在優(yōu)勢(shì)方面,Android平臺(tái)首先就是其開放性,開發(fā)的平臺(tái)允許任何移動(dòng)終端廠商參加到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將很快走向成熟。開發(fā)性對(duì)于Android的開展而言,有利于積累人氣,這里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者來講,最大的受益正是豐富的軟件資源。開放的平臺(tái)也會(huì)帶來更大競(jìng)爭(zhēng),如此一來,消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的。〔2〕掙脫運(yùn)營(yíng)商的束縛在過去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。自從iPhone上市,用戶可以更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過渡和提升,隨意接入網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談?!?〕豐富的硬件選擇這一點(diǎn)還是與Android平臺(tái)的開放性相關(guān),由于Android的開放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容。好比你從諾基亞Symbian風(fēng)格一下改用蘋果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移?!?〕不受任何限制的開發(fā)商Android平臺(tái)提供給第三方開發(fā)商一個(gè)十分寬泛、自由的環(huán)境。因此不會(huì)受到各種條條框框的阻撓,可想而知,會(huì)有多少新穎別致的軟件會(huì)誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android難題之一?!?〕無縫結(jié)合的Google應(yīng)用如今叱咤互聯(lián)網(wǎng)的Google已經(jīng)走過10年度歷史。從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google效勞如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)將無縫結(jié)合這些優(yōu)秀的Google效勞。Android系統(tǒng)架構(gòu):Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和linux核心層。圖1-1Android系統(tǒng)架構(gòu)圖〔1〕應(yīng)用程序Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的?!?〕應(yīng)用程序框架開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的平安性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。〔3〕系統(tǒng)運(yùn)行庫1)程序庫Android包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過Android應(yīng)用程序框架為開發(fā)者提供效勞。以下是一些核心庫:系統(tǒng)C庫:一個(gè)從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(libc),它是專門為基于embeddedlinux的設(shè)備定制的。媒體庫:基于PacketVideoOpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。SurfaceManager:對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供了2D和3D圖層的無縫融合。LibWebCore:一個(gè)最新的web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。SGL:底層的2D圖形引擎。3Dlibraries:基于OpenGLES1.0APIs實(shí)現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。FreeType:位圖(bitmap)和矢量(vector)字體顯示。SQLite:一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。2)Android運(yùn)行庫Android包括了一個(gè)核心庫,該核心庫提供了Java編程語言核心庫的大多數(shù)功能。由Dalvik虛擬機(jī)和根底的java類庫組成?!?〕Linux內(nèi)核Android的核心系統(tǒng)效勞依賴于Linux2.6內(nèi)核,如平安性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。Android系統(tǒng)的四大組件:在Android系統(tǒng)中,為我們提供了四大根本組件,每個(gè)組件是一個(gè)視圖,但是有些是可見的,有些是不可見的視圖,像Activity,ContentProvider是可見的視圖,Service和BroadcastReceiver是不可見的,它們只在系統(tǒng)的后臺(tái)運(yùn)行。下面分別介紹四大組件:〔1〕Activity簡(jiǎn)介在Android系統(tǒng)中Activity提供可視化的用戶界面,一個(gè)Android應(yīng)用通常由多個(gè)Activity組成。多個(gè)Activity組成了Activity?!睸tack〕,當(dāng)前活動(dòng)的Activity處于棧頂。Activity有自己的生命周期,由Android系統(tǒng)來控制?!?〕Service簡(jiǎn)介顧名思義Service就是運(yùn)行在后臺(tái)的一種效勞程序,一般很少和用戶交互,因此沒有可視化界面定義一個(gè)Service類比較簡(jiǎn)單,只要繼承Service類,實(shí)現(xiàn)其生命周期中的方法就可以了。一個(gè)定義好的Service必須在AndroidManifest.xml配置文件注冊(cè),通過<service>元素聲明才能使用.Service有自己的生命周期,我們可以調(diào)用startService()啟動(dòng)一個(gè)Service或者bindService()方法來綁定一個(gè)存在的Service?!?〕BroadcastReceiver簡(jiǎn)介BroadcastReceiver顧名思義播送接收器,它和事件處理機(jī)制類似,只不過事件處理機(jī)制是程序組件級(jí)別的〔例如,某個(gè)按鈕的單擊事件〕,而播送事件處理機(jī)制是系統(tǒng)級(jí)別的。到目前為止我們可以使用Intent來啟動(dòng)一個(gè)程序組件,我們還可以通過使用sendBroadcast()方法來發(fā)起一個(gè)系統(tǒng)級(jí)別的事件播送來傳遞消息。我們可以在你的應(yīng)用程序中實(shí)現(xiàn)BroadcastReceiver來監(jiān)聽和響應(yīng)這些播送的Intent?!?〕ContentProvider簡(jiǎn)介ContentProvider用來保存和檢索數(shù)據(jù),并且使應(yīng)用程序之間相互訪問數(shù)據(jù)成為可能。它是跨應(yīng)用程序共享數(shù)據(jù)的唯一方法。Android為常用的數(shù)據(jù)類型〔如:音視頻、圖片和聯(lián)系方式等〕提供了大量的ContentProvider。它們被定義在vider包下面。通過這樣定義好的ContentProvider我們可以方便的進(jìn)行數(shù)據(jù)操作。當(dāng)然我們必須擁有適當(dāng)?shù)臋?quán)限。我們也可以自己來定ContentProvider共享我們的數(shù)據(jù),方便用戶的訪問。Java技術(shù)Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)〔即JavaSE,JavaEE,JavaME〕的總稱。Java技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和平安性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。Java是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它繼承了C++語言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C++語言中容易引起錯(cuò)誤的指針〔以引用取代〕、運(yùn)算符重載〔operatoroverloading〕、多重繼承〔以接口取代〕等特性,增加了垃圾回收器功能用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。而且不同于一般的編譯執(zhí)行計(jì)算機(jī)語言和解釋執(zhí)行計(jì)算機(jī)語言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼〔bytecode〕,然后依賴各種不同平臺(tái)上的虛擬機(jī)來解釋執(zhí)行字節(jié)碼,從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行〞的跨平臺(tái)特性。不過,每次的編譯執(zhí)行需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了Java程序的運(yùn)行效率。與傳統(tǒng)程序不同,Sun公司在推出Java之際就將其作為一種開放的技術(shù)。全球數(shù)以萬計(jì)的Java開發(fā)公司被要求所設(shè)計(jì)的Java軟件必須相互兼容。“Java語言靠群體的力量而非公司的力量〞是Sun公司的口號(hào)之一,并獲得了廣闊軟件開發(fā)商的認(rèn)同。這與微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。Java語言有以下特點(diǎn)是簡(jiǎn)單的、是一個(gè)面向?qū)ο蟮?、是分布式的、是健壯的、是平安的、是體系結(jié)構(gòu)中立的、是可移植的、是解釋型的、是高性能的、是多線程的,是動(dòng)態(tài)的。UML簡(jiǎn)介UML是一種面向?qū)ο蟮慕UZ言,它是運(yùn)用統(tǒng)一的、標(biāo)準(zhǔn)化的標(biāo)記和定義實(shí)現(xiàn)對(duì)軟件系統(tǒng)進(jìn)行面向?qū)ο蟮拿枋龊徒?。UML又稱統(tǒng)一建模語言或標(biāo)準(zhǔn)建模語言,是始于1997年一個(gè)OMG標(biāo)準(zhǔn),它是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構(gòu)造和配置。面向?qū)ο蟮姆治雠c設(shè)計(jì)方法的開展在80年代末至90年代中出現(xiàn)了一個(gè)高潮,UML是這個(gè)高潮的產(chǎn)物。它不僅統(tǒng)一了Booch、Rumbaugh和Jacobson的表示方法,而且對(duì)其作了進(jìn)一步的開展,并最終統(tǒng)一為群眾所接受的標(biāo)準(zhǔn)建模語言。〔1〕UML中的圖例第一類是用例圖,從用戶角度描述系統(tǒng)功能,并指出各功能的操作者。第二類是靜態(tài)圖,包括類圖、對(duì)象圖和包圖。其中類圖描述系統(tǒng)中類的靜態(tài)結(jié)構(gòu)。不僅定義系統(tǒng)中的類,表示類之間的聯(lián)系如關(guān)聯(lián)、依賴、聚合等,也包括類的內(nèi)部結(jié)構(gòu)〔類的屬性和操作〕。對(duì)象圖是類圖的實(shí)例一個(gè)對(duì)象圖是類圖的一個(gè)實(shí)例。包圖用于描述系統(tǒng)的分層結(jié)構(gòu)。第三類是行為圖〔Behaviordiagram〕,描述系統(tǒng)的動(dòng)態(tài)模型和組成對(duì)象間的交互關(guān)系。行為圖包括:狀態(tài)圖、活動(dòng)圖、順序圖和協(xié)作圖。其中狀態(tài)圖描述類的對(duì)象所有可能的狀態(tài)以及事件發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件?;顒?dòng)圖描述滿足用例要求所要進(jìn)行的活動(dòng)以及活動(dòng)間的約束關(guān)系,有利于識(shí)別并行活動(dòng)。順序圖展現(xiàn)了一組對(duì)象和由這組對(duì)象收發(fā)的消息,用于按時(shí)間順序?qū)刂屏鹘?。用順序圖說明系統(tǒng)的動(dòng)態(tài)視圖。協(xié)作圖展現(xiàn)了一組對(duì)象,這組對(duì)象間的連接以及這組對(duì)象收發(fā)的消息。第四類是交互圖〔Interactivediagram〕,描述對(duì)象間的交互關(guān)系。第五類是實(shí)現(xiàn)圖(Implementationdiagram)。用來描述系統(tǒng)實(shí)現(xiàn)方面的信息。它從系統(tǒng)的層次描述硬件的組成和布局、軟件系統(tǒng)的劃分和功能實(shí)現(xiàn)?!?〕UML的應(yīng)用領(lǐng)域UML的目標(biāo)是以面向?qū)ο髨D的方式來描述任何類型的系統(tǒng),具有很寬的應(yīng)用領(lǐng)域。其中最常用的是建立軟件系統(tǒng)的模型??傊?,UML是一個(gè)通用的標(biāo)準(zhǔn)建模語言,可以對(duì)任何具有靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的系統(tǒng)進(jìn)行建模。此外,UML適用于系統(tǒng)開發(fā)過程中從需求規(guī)格描述到系統(tǒng)完成后測(cè)試的不同階段。在需求分析階段,可以用用例來捕獲用戶需求。通過用例建模,描述對(duì)系統(tǒng)感興趣的外部角色及其對(duì)系統(tǒng)〔用例〕的功能要求。分析階段主要關(guān)心問題域中的主要概念〔如抽象、類和對(duì)象等〕和機(jī)制,需要識(shí)別這些類以及它們相互間的關(guān)系,并用UML類圖來描述。為實(shí)現(xiàn)用例,類之間需要協(xié)作,這可以用UML動(dòng)態(tài)模型來描述。在分析階段,只對(duì)問題域的對(duì)象〔現(xiàn)實(shí)世界的概念〕建模,而不考慮定義軟件系統(tǒng)中技術(shù)細(xì)節(jié)的類〔如處理用戶接口、數(shù)據(jù)庫、通訊和并行性等問題的類〕。這些技術(shù)細(xì)節(jié)將在設(shè)計(jì)階段引入,因此設(shè)計(jì)階段為構(gòu)造階段提供更詳細(xì)的規(guī)格說明。需求分析根據(jù)設(shè)計(jì)的目標(biāo),我們可獲得系統(tǒng)的根本需求,以下從應(yīng)用需求分析并且使用用例圖來描述系統(tǒng)的功能需求。應(yīng)用需求分析本模塊結(jié)合UML用例圖來對(duì)應(yīng)用需求分析中功能需求和性能需求進(jìn)行分析。功能需求功能需求主要是為了明確所開發(fā)軟件必須具備的功能,本設(shè)計(jì)的電子書閱覽器對(duì)給用戶提供方便的操作和閱讀上的體驗(yàn)扮演著正要的角色。電子書閱覽器根本的功能需求如下:〔1〕圖書以列表的形式顯示在SDCard中,并支持從SDCard中選擇txt圖書?!?〕當(dāng)用戶點(diǎn)擊某一本電子書之后,可以進(jìn)入閱讀界面對(duì)字體的大小、顏色、背景圖片、背景音樂等特效進(jìn)行設(shè)置?!?〕當(dāng)用戶感覺到手動(dòng)的翻頁比較麻煩的時(shí)候,可以設(shè)置自動(dòng)翻頁,設(shè)置自動(dòng)翻頁的時(shí)間等?!?〕當(dāng)用戶有事把圖書暫放一邊的時(shí)候,可以對(duì)自己閱讀到的章節(jié)進(jìn)行添加書簽,方便下次的閱讀。根據(jù)功能需求本設(shè)計(jì)的電子書閱覽器的功能包括以下幾局部:〔1〕找書功能用戶通過對(duì)菜單項(xiàng)選擇項(xiàng)中的找書按鈕進(jìn)行操作,即可以從SDCard中選擇圖書進(jìn)行閱讀?!?〕書簽功能書簽功能即為了實(shí)現(xiàn)用戶下次閱讀的方便而設(shè)計(jì)的。當(dāng)用戶點(diǎn)擊菜單“書簽〞按鈕時(shí)候,可以選擇“添加書簽〞對(duì)讀到的章節(jié)進(jìn)行添加書簽進(jìn)行標(biāo)記?!?〕自動(dòng)翻頁功能用戶點(diǎn)擊菜單“自動(dòng)翻頁〞按鈕,可以選擇自動(dòng)翻頁的時(shí)間,具體時(shí)間包括30S、40S、50S,也可以取消自動(dòng)翻頁功能。〔4〕設(shè)置功能設(shè)置功能主要的目的是為了方便用戶的閱讀體驗(yàn),設(shè)置功能主要包括:設(shè)置字體大小,分為大號(hào)、中號(hào)、小號(hào);設(shè)置字體的顏色,用戶可以根據(jù)自己的需求進(jìn)行選擇;設(shè)置背景圖片,使用戶有更好的閱讀視覺;設(shè)置背景音樂。性能需求軟件要有良好的用戶體驗(yàn),良好的用戶體驗(yàn)表達(dá)在以下幾個(gè)方面:(1)界面友好用戶界面要簡(jiǎn)潔直觀,設(shè)計(jì)合理,方便用戶操作,讓用戶操作起來比較舒服。(2)快速響應(yīng)快速處理用戶的輸入或請(qǐng)求,對(duì)于需要長(zhǎng)時(shí)間處理的局部,在其處理時(shí)可以給用戶一個(gè)提示,告知用戶該軟件正在運(yùn)行。(3)無縫性一個(gè)常見的無縫問題就是一個(gè)應(yīng)用的后臺(tái)進(jìn)程對(duì)某事件作出響應(yīng)而彈出對(duì)話框,這看起來仿佛并無大礙,特別是當(dāng)你在模擬器上單獨(dú)地構(gòu)建和測(cè)試你的應(yīng)用時(shí)。然而,當(dāng)你的應(yīng)用在真正的設(shè)備上運(yùn)行,后臺(tái)線程顯示對(duì)話框時(shí),你的應(yīng)用當(dāng)時(shí)可能沒有獲得用戶焦點(diǎn)。這就會(huì)出現(xiàn)你的應(yīng)用會(huì)在活動(dòng)的應(yīng)用后面顯示對(duì)話框,或者從當(dāng)前應(yīng)用中獲得焦點(diǎn)并顯示對(duì)話框的情況,而管論當(dāng)時(shí)用戶正在做什么〔如正在打等〕。那樣的行為可能對(duì)你的應(yīng)用或用戶不起作用。用例分析用例分析主要是結(jié)合UML用例圖來對(duì)功能需求進(jìn)行分析,主要來分析該設(shè)計(jì)的根本功能和以及對(duì)電子書管理需求?!?〕電子書閱覽器的根本功能電子書閱覽器的根本功能主界面用例圖如下:圖2-1電子書閱覽器的根本功能主界面表2-1找書用例名稱:找書參與者:用戶目標(biāo):用戶可以從電子書列表中找到電子書前置條件:電子書閱覽器以啟動(dòng)根本領(lǐng)件流:從電子書列表中選擇書表2-2書簽用例名稱:書簽參與者:用戶目標(biāo):當(dāng)用戶不讀電子書時(shí)可以加上書簽對(duì)下次閱讀起到方便作用前置條件:有已經(jīng)翻開的電子書根本領(lǐng)件流:點(diǎn)擊書簽按鈕給文章參加書簽表2-3自動(dòng)翻頁用例名稱:自動(dòng)翻頁參與者:用戶目標(biāo):設(shè)置自動(dòng)翻頁的時(shí)間及取消自動(dòng)翻頁前置條件:無根本領(lǐng)件流:設(shè)置自動(dòng)翻頁的時(shí)間、取消自動(dòng)翻頁表2-4設(shè)置用例名稱:設(shè)置參與者:用戶目標(biāo):設(shè)置字體大小顏色、設(shè)置背景音樂圖片,到達(dá)用戶讀電子書心情更好前置條件:無根本領(lǐng)件流:設(shè)置背景音樂、背景圖片、字體顏色、字體大小〔2〕電子書的管理需求電子書的管理需求的用例圖如下:圖2-2電子書閱覽器的管理需求表2-5從SDCard中找書用例名稱:從SDCard中選書參與者:用戶目標(biāo):用戶進(jìn)入SDCard中從電子書列表中找到電子書前置條件:SDCard中有電子書根本領(lǐng)件流:從電子書列表中選擇書表2-6添加書簽/選擇書簽/清空書簽用例名稱:添加書簽/選擇書簽/清空書簽參與者:用戶目標(biāo):當(dāng)用戶不讀電子書時(shí)可以加上書簽,下次閱讀時(shí)清空書簽。對(duì)閱讀起到方便作用前置條件:有已經(jīng)翻開的電子書根本領(lǐng)件流:點(diǎn)擊書簽按鈕給文章參加書簽表2-7選擇自動(dòng)翻頁的時(shí)間用例名稱:選擇自動(dòng)翻頁的時(shí)間參與者:用戶目標(biāo):選擇自動(dòng)的翻頁時(shí)間前方便用戶的閱讀前置條件:無根本領(lǐng)件流:設(shè)置自動(dòng)翻頁的時(shí)間、取消自動(dòng)翻頁表2-8設(shè)置背景音樂/背景圖片用例名稱:設(shè)置背景音樂/背景圖片參與者:用戶目標(biāo):在讀電子書的時(shí)候可以有背景音樂和背景圖片,使讀者心情更愉快前置條件:無根本領(lǐng)件流:設(shè)置背景音樂、背景圖片表2-9字體大小/字體顏色用例名稱:字體大小/字體顏色參與者:用戶目標(biāo):方便用戶閱讀前置條件:無根本領(lǐng)件流:設(shè)置字體大小、顏色開發(fā)環(huán)境與工具本設(shè)計(jì)是基于Android平臺(tái)的,Android平臺(tái)為開發(fā)者提供了源碼開放的軟件開發(fā)包(SDK),它包含了使用Java語言開發(fā)Android平臺(tái)應(yīng)用的必要工具和組件(API)。進(jìn)行開發(fā)前先要建立適宜的開發(fā)環(huán)境,其中基于Java的整合型可擴(kuò)展平臺(tái)Eclipse是我們的首選?!?〕搭建環(huán)境所需要的軟件:操作系統(tǒng):Windows7;軟件包:AndroidSDK,ADT;IDE環(huán)境:EclipseIDE+ADTEclipse3.3以上;JDK:JavaRuntimeEnvironmcnt,JDK;〔2〕安裝步驟:安裝JDK然后配置環(huán)境變量;安裝Eclipse;〔3〕AndroidSDK配置/安裝:首先在:///sdk/index.html下載,選擇相應(yīng)的系統(tǒng)進(jìn)行安裝;〔4〕安裝AndroidADT插件:翻開Eclipse,在導(dǎo)航菜單中選擇Help-InstallNewSoftware。在workwith中輸入s://dl-ssl.google/android/eclipse/ADD然后輸入name,隨便取個(gè)有意義的,都選中安裝,完畢后重啟Eclipse。在Eclipse里配置SDK路徑,選擇Windows->Preferences->Android,選擇AndroidSDK的位置。系統(tǒng)總體設(shè)計(jì)功能模塊設(shè)計(jì)功能模塊圖經(jīng)過對(duì)市場(chǎng)調(diào)研以及需求分析可知,本案例主要包括書目的查找模塊、自動(dòng)翻頁模塊、書簽管理模塊和文本屬性設(shè)置模塊,其功能模塊圖如下:圖3-1電子閱覽器的功能模塊圖其具體的功能如下:從SDCard找書。用戶可以吧下載好的文本放到SD卡中,就可以從SD卡中讀取你需要閱讀的文本,以滿足用戶多方位的閱讀需求,增強(qiáng)本案例的實(shí)用性。翻頁功能。用戶可以根據(jù)需求選擇自動(dòng)翻頁功能,每30秒,或者更長(zhǎng)時(shí)間來自動(dòng)翻頁,增強(qiáng)用戶的閱讀體驗(yàn),方便閱讀。書簽功能。用戶可以根據(jù)自己的需求,為所閱讀的文本添加書簽,方便下次閱讀,也可以選擇刪除不再需要的書簽,或同時(shí)刪除所有書簽。系統(tǒng)設(shè)置。用戶可以根據(jù)自己的需求,更改字體的顏色,字體大小以及背景圖片,來滿足實(shí)際應(yīng)用中的多重需求。同時(shí),用戶可以選擇在閱讀時(shí)播放音樂。系統(tǒng)流程圖當(dāng)用戶使用該電子閱覽器是,首先啟動(dòng)閱覽器后個(gè)歡迎界面,其次是電子書的閱讀界面,如果是重新選擇另外一本電子書這時(shí)候需要在菜單找書按鈕中選擇從SDCard中找書即可實(shí)現(xiàn)換讀另外書籍;如果選擇繼續(xù)閱讀的話就可以繼續(xù)閱讀,可以對(duì)該閱讀界面進(jìn)行一些操作和設(shè)置如設(shè)置是否自動(dòng)翻頁、設(shè)置字體的大小、背景圖片、背景音樂等等。還可以對(duì)該閱讀界面添加書簽以便下次方便閱讀。圖3-2系統(tǒng)流程圖系統(tǒng)時(shí)序圖時(shí)序圖它是通過描述對(duì)象之間發(fā)送消息的時(shí)間順序顯示多個(gè)對(duì)象之間的動(dòng)態(tài)協(xié)作。它可以表示用例的行為順序,當(dāng)執(zhí)行一個(gè)用例行為時(shí),時(shí)序圖中的每條消息對(duì)應(yīng)了一個(gè)類操作或狀態(tài)機(jī)中引起轉(zhuǎn)換的觸發(fā)事件。本設(shè)計(jì)的時(shí)序圖如下:當(dāng)用戶執(zhí)行翻開閱讀界面這個(gè)用例的時(shí)候,可以選擇繼續(xù)閱讀,也可以選擇從SDCard中重新加載另外一本書。下面用戶可以對(duì)該篇電子書進(jìn)行相關(guān)的操作設(shè)置自動(dòng)翻頁、設(shè)置字體大小、顏色、背景圖片、背景音樂等。當(dāng)用戶執(zhí)行完這個(gè)用例的時(shí)候,可以對(duì)讀到的小說章節(jié)參加書簽,以便下次閱讀的方便。圖3-3系統(tǒng)時(shí)序圖數(shù)據(jù)庫設(shè)計(jì)本案例的書簽功能涉及了數(shù)據(jù)庫的使用,下面介紹數(shù)據(jù)庫的E-R圖,通過數(shù)據(jù)庫的E-R圖可以了解到各個(gè)實(shí)體的屬性,方便讀者對(duì)于后面數(shù)據(jù)庫的理解,數(shù)據(jù)庫E-R圖如圖3-4所示。概念結(jié)構(gòu)設(shè)計(jì)在數(shù)據(jù)庫的E-R圖中BookRecord表示的是閱讀記錄表,其具體屬性信息為閱讀記錄的ID、書的路徑和閱讀時(shí)記錄的數(shù)據(jù),其中閱讀記錄的ID為本表的主鍵;BookMark表示的是書簽表,其具體的屬性信息為書簽的ID、書簽對(duì)應(yīng)的閱讀的閱讀記錄的ID、書簽名和書頁號(hào),其中書簽的ID為表的主鍵,書簽對(duì)應(yīng)的閱讀記錄的ID為表BookRecord中ID的外鍵;LastTimePage表示的是上次閱讀的記錄表,其具體屬性信息為上次閱讀記錄的ID、書的路徑、上次閱讀的頁數(shù)和上次閱讀時(shí)字體大小。以下圖為書簽功能的E-R圖:圖3-4書簽功能的E-R圖邏輯結(jié)構(gòu)設(shè)計(jì)〔1〕閱讀記錄表。該表用于記錄閱讀記錄的ID、書的路徑和閱讀時(shí)記錄的數(shù)據(jù),具體如表所示表3-1閱讀記錄表字段名稱數(shù)據(jù)類型字段類型是否主鍵說明ridInteger8是閱讀記錄的IDpath文本50否書的路徑data字節(jié)組數(shù)不定否閱讀記錄數(shù)據(jù)〔2〕書簽表。用來記錄書簽的ID、書簽對(duì)應(yīng)閱讀記錄的ID、書簽名和書頁號(hào)如以下圖:表3-2書簽表字段名稱數(shù)據(jù)類型字段大小是否主鍵說明midInteger8是書簽的IDridfkInteger8否書簽對(duì)應(yīng)閱讀記錄的IDbmname文本50否書簽名pageInteger8否書頁〔3〕上次閱讀的記錄。該表記錄上次閱讀的ID、書的路徑和上次閱讀的頁數(shù),如以下圖:表3-2上次閱讀記錄表字段名稱數(shù)據(jù)類型字段大小是否主鍵說明libInteger8是上次閱讀記錄的IDpath文本50否書的路徑pageInteger8否上次閱讀的頁數(shù)fontsizeInteger8否上次閱讀時(shí)字體大小系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)歡迎界面的實(shí)現(xiàn)在本節(jié)主要介紹的是閱讀器歡迎界面類WellcomeSurfaceView的開發(fā)。該類完成了“電子閱覽器〞和“梁澤允制作〞的漸變顯示效果,在進(jìn)入程序界面時(shí)首先調(diào)用,其歡迎界面如下。圖4-1歡迎界面圖在進(jìn)入程序界面時(shí)首先調(diào)用,其代碼的實(shí)現(xiàn)如下:publicclassWelcomeSurfaceextendsSurfaceViewimplementsSurfaceHolder.Callback{ReaderActivityactivity;Paintpaint; intcurrentAlpha=0;intsleepSpan=50;Bitmap[]logos=newBitmap[2];BitmapcurrentLogo;intcurrentX;intcurrentY;publicWelcomeSurface(ReaderActivityactivity){super(activity);this.activity=activity;this.getHolder().addCallback(this);paint=newPaint();paint.setAntiAlias(true);logos[0]=BitmapFactory.decodeResource(activity.getResources(),R.drawable.dukea);logos[1]=BitmapFactory.decodeResource(activity.getResources(),R.drawable.dukeb);}publicvoidonDraw(Canvascanvas){paint.setColor(Color.BLACK);paint.setAlpha(255);canvas.drawRect(0,0,Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT,paint);if(currentLogo==null)return;paint.setAlpha(currentAlpha);canvas.drawBitmap(currentLogo,currentX,currentY,paint);}publicvoidrun(){for(Bitmapbm:logos){currentLogo=bm;currentX=Constant.SCREEN_WIDTH/2-bm.getWidth()/2;currentY=Constant.SCREEN_HEIGHT/2-bm.getHeight()/2;for(inti=255;i>-10;i=i-10){currentAlpha=i;if(currentAlpha<0){currentAlpha=0;}SurfaceHoldermyholder=WelcomeSurface.this.getHolder();Canvascanvas=myholder.lockCanvas();}}找書功能的實(shí)現(xiàn)找書就是在SDCard中找書,用戶可以將已有的txt格式的書放在SDCard中,通過本閱讀器的在SDCard中找書的功能,將書加載進(jìn)閱讀器進(jìn)行閱讀。此項(xiàng)功能具體開發(fā)步驟如下:〔1〕菜單找書按鈕的開發(fā),在開發(fā)具體功能之前,要先對(duì)菜單按鈕添加監(jiān)聽器,其代碼如下:publicbooleanonCreateOptionsMenu(Menumenu){MenuItemsearch=menu.add(0,0,0,R.string.search);search.setIcon(R.drawable.m_search);OnMenuItemClickListenersearchbook=newOnMenuItemClickListener(){publicbooleanonMenuItemClick(MenuItemitem){showDialog(LIST_SEARCH);returntrue;}};search.setOnMenuItemClickListener(searchbook);returntrue;}〔2〕在SDCARD中找書方法的實(shí)現(xiàn)。該方法主要負(fù)責(zé)根據(jù)當(dāng)前路徑獲得對(duì)應(yīng)的文件組,并將數(shù)組中所有的所有文件參加到文件列表中,其具體代碼如下:publicvoidonClick(Viewv){if(lvutills.currentPath.equals("/sdcard")){Toast.makeText(ReaderActivity.this,"已經(jīng)到根目錄了",Toast.LENGTH_SHORT).show();}else{Filecf=newFile(lvutills.currentPath);cf=cf.getParentFile();lvutills.currentPath=cf.getPath();oListView(lvutills.getFiles(lvutills.currentPath),lv); }}〔3〕將各個(gè)文件添加到ListView列表中,其具體代碼如下:publicvoidintoListView(finalFile[]files,finalListViewlv){if(files!=null){if(files.length==0){Filecf=newFile(currentPath);cf=cf.getParentFile();currentPath=cf.getPath();Toast.makeText(reader,"該文件夾為空??!",Toast.LENGTH_SHORT).show();}else{BaseAdapterba=newBaseAdapter(){publicintgetCount(){returnfiles.length;}}}}publicObjectgetItem(intposition){returnnull;}publiclonggetItemId(intposition){return0;}}書簽功能模塊的實(shí)現(xiàn)在本節(jié)會(huì)詳細(xì)的介紹書簽中自定義Dialog、長(zhǎng)按書簽中的某一項(xiàng)刪除書簽、單擊書簽中某一項(xiàng)跳轉(zhuǎn)等功能的實(shí)現(xiàn)。添加書簽功能的實(shí)現(xiàn)讀者可能會(huì)發(fā)現(xiàn),書簽功能中很多漂亮的Dialog,這些Dialog是通過xml文件自己布局的或者通過Java代碼實(shí)現(xiàn)的,在這一節(jié)中將會(huì)介紹自定義Dialog?!?〕MyDialog類的開發(fā)。編寫自定義的Dialog需要定義一個(gè)繼承Dialog的類,這個(gè)類中確定了將要開發(fā)的布局文件,規(guī)定了Dialog的屬性,把布局文件和Java代碼有機(jī)地聯(lián)系起來,實(shí)現(xiàn)代碼如下:publicclassMyDialogextendsDialog{publicMyDialog(Contextcontext){super(context,R.style.FullHeightDialog);}publicvoidonCreate(BundlesavedInstanceState){this.setContentView(R.layout.bookmark_input);}}〔2〕創(chuàng)立輸入對(duì)話框,并且實(shí)現(xiàn)其監(jiān)聽的方法publicDialogonCreateDialog(intid){Dialogdialog=null;switch(id){caseLIST_BOOKMARK:b=newAlertDialog.Builder(this);b.setIcon(R.drawable.m_bookmark);b.setTitle(R.string.bookmark);b.setItems(R.array.bookmark,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){switch(which){case0:showDialog(NAME_INPUT_DIALOG_ID);break;case1:try{haveBookMark=SQLDBUtil.judgeHaveBookMark(Constant.FILE_PATH);}catch(Exceptione){e.printStackTrace();}if(haveBookMark){showDialog(SELECT_BOOKMARK);}else{Toast.makeText(ReaderActivity.this,"請(qǐng)先添加書簽",Toast.LENGTH_SHORT).show();}break;case2:showDialog(DELETE_ALL_BOOKMARK);break;}}});dialog=b.create();break;caseNAME_INPUT_DIALOG_ID:dialog=newMyDialog(this);break;caseSELECT_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseEXIT_READER:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseDELETE_ONE_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseDELETE_ALL_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;returndialog;}選擇書簽功能的實(shí)現(xiàn)在上一小節(jié)的onCreateDialog方法中提到了選擇書簽對(duì)話框,在本小節(jié)中,將會(huì)對(duì)其進(jìn)行詳細(xì)的介紹,選擇書簽對(duì)話框不聽添加對(duì)話框,是用Java代碼實(shí)現(xiàn)的,其詳細(xì)介紹如下:選擇書簽對(duì)話框時(shí)通過Java代碼實(shí)現(xiàn)的。通過這一小節(jié)的學(xué)習(xí),讀者可以學(xué)會(huì)如何運(yùn)用Java代碼編寫自定義對(duì)話框。實(shí)現(xiàn)代碼如下:caseSELECT_BOOKMARK:try{dataBaseBookMark=SQLDBUtil.getBookmarkList(Constant.FILE_PATH); inti=0;tempname=newString[dataBaseBookMark.size();temppage=newint[dataBaseBookMark.size();for(BookMarkdataBookMark:dataBaseBookMark){tempname[i]=dataBookMark.bmname;temppage[i]=dataBookMark.page;i++;}}catch(Exceptione){e.printStackTrace();}LinearLayoutll=newLinearLayout(ReaderActivity.this);ll.setOrientation(LinearLayout.VERTICAL);ll.setGravity(Gravity.CENTER_HORIZONTAL);ll.setBackgroundResource(R.drawable.dialog);LinearLayoutlln=newLinearLayout(ReaderActivity.this);lln.setOrientation(LinearLayout.HORIZONTAL);lln.setGravity(Gravity.CENTER);lln.setLayoutParams(newViewGroup.LayoutParams(200,LayoutParams.WRAP_CONTENT));TextViewtvTitle=newTextView(ReaderActivity.this);tvTitle.setText(R.string.bookmark_dialog);tvTitle.setTextSize(20);tvTitle.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));lln.addView(tvTitle);ll.addView(lln);ListViewlv=newListView(this);lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);BaseAdapterba=newBaseAdapter(){publicintgetCount(){returntempname.length;}publicObjectgetItem(intarg0){returnnull;}publiclonggetItemId(intarg0){return0;}publicViewgetView(intarg0,Viewarg1,ViewGrouparg2){LinearLayoutllb=newLinearLayout(ReaderActivity.this);llb.setOrientation(LinearLayout.HORIZONTAL);llb.setPadding(5,5,5,5);ImageViewimage=newImageView(ReaderActivity.this);image.setImageDrawable(ReaderActivity.this.getResources().getDrawable(R.drawable.sl_bookmark));image.setScaleType(ImageView.ScaleType.FIT_XY);image.setLayoutParams(newGallery.LayoutParams(30,30));llb.addView(image);TextViewtv=newTextView(ReaderActivity.this);tv.setGravity(Gravity.LEFT);tv.setText(tempname[arg0]+""+"第"+String.valueOf(temppage[arg0]+1)+"頁");tv.setTextSize(20);tv.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));tv.setPadding(0,0,0,0);llb.addView(tv);returnllb;}}lv.setAdapter(ba);設(shè)置功能模塊的實(shí)現(xiàn)設(shè)置字體大小功能的實(shí)現(xiàn)在前面的軟件功能結(jié)構(gòu)這一節(jié)中,提到了設(shè)置字體大小的功能。從本節(jié)開始,將會(huì)詳細(xì)的介紹字體的大小對(duì)話框功能的實(shí)現(xiàn)。字體大小的對(duì)話框與選擇書簽對(duì)話框的做法根本相同,也是通過Java代碼為對(duì)話框中的控件的擺放形式設(shè)置布局,由于其與選擇書簽的對(duì)話框類似,這里只介紹字體大小對(duì)話框的監(jiān)聽事件,實(shí)現(xiàn)代碼如下:publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){switch(arg2){case0:if(Constant.TEXT_SIZE!=16){Constant.TEXT_SIZE=16;Constant.TEXT_SPACE_BETWEEN_CN=16;Constant.TEXT_SPACE_BETWEEN_EN=8;Constant.changeRatio();updataBookMarkAndHashMap();}break;case1:if(Constant.TEXT_SIZE!=24){Constant.TEXT_SIZE=24;Constant.TEXT_SPACE_BETWEEN_CN=24;Constant.TEXT_SPACE_BETWEEN_EN=12;Constant.changeRatio();updataBookMarkAndHashMap();}break;case2:if(Constant.TEXT_SIZE!=32){Constant.TEXT_SIZE=32;Constant.TEXT_SPACE_BETWEEN_CN=32;Constant.TEXT_SPACE_BETWEEN_EN=16;Constant.changeRatio();updataBookMarkAndHashMap();}break;}}更換背景圖片以及設(shè)置字體顏色上一節(jié)詳細(xì)介紹了設(shè)置字體大小更能的開發(fā),為了豐富閱讀的體驗(yàn),本案例還具有更換背景圖片的功能,在本節(jié)將詳細(xì)介紹。〔1〕自定義對(duì)話框配置文件的設(shè)置為了應(yīng)用界面更加美觀、實(shí)用,需要自定義對(duì)話框來滿足本應(yīng)用的開發(fā),本小節(jié)將主要講解自定義對(duì)話框配置文件的設(shè)置,下面的styles.xml文件設(shè)定了Dialog的背景圖片和標(biāo)題格式,并設(shè)定對(duì)話框的屬性。<?xmlversion="1.0"encoding="utf-8"?><resources><style name="FullHeightDialog"parent="android:style/Theme.Dialog"><itemname="android:windowNoTitle">true</item><itemname="android:windowBackground">@drawable/dialog</item></style></resources>〔2〕更換背景圖片功能的實(shí)現(xiàn)下面詳細(xì)介紹更換背景圖片的具體功能實(shí)現(xiàn)過程:publicvoidonClick(Viewv){Constant.BITMAP=drawableIds[0];readerView.bmBack=PicLoadUtil.LoadBitmap(readerView.getResources(),BITMAP);readerView.bmBack=PicLoadUtil.scaleToFit(readerView.bmBack,PAGE_WIDTH,PAGE_HEIGHT);readerView.currRR=newReadRecord(CURRENT_LEFT_START,0,CURRENT_PAGE);readerView.bmLeft=readerView.drawPage(readerView.currRR);readerView.bmRight=readerView.drawPage(readerView.currRR);readerView.repaint();dialog.cancel();}〔3〕設(shè)置字體顏色功能的實(shí)現(xiàn)詳細(xì)設(shè)計(jì)過程代碼如下:publicvoidonClick(Viewv){Constant.COLOR=0xff000000;readerView.currRR=newReadRecord(CURRENT_LEFT_START,0,CURRENT_PAGE);readerView.bmLeft=readerView.drawPage(readerView.currRR);readerView.bmRight=readerView.drawPage(readerView.currRR);readerView.repaint();dialog.cancel();}背景音樂播放功能的實(shí)現(xiàn)上一小節(jié)詳細(xì)介紹了更換背景圖片、設(shè)置字體顏色的實(shí)現(xiàn),為了豐富閱讀的經(jīng)驗(yàn),增加閱讀的樂趣,本案例還具有播放背景音樂的功能,在本節(jié)中將詳細(xì)介紹?!?〕創(chuàng)立對(duì)話框?yàn)榱藵M足用戶多方位的需求,需要做出更漂亮,更實(shí)用的對(duì)話框,本小節(jié)將詳細(xì)介紹另一種自定義對(duì)話框的實(shí)現(xiàn)。實(shí)現(xiàn)方法如下:publicvoidsetBackgroundMusicDialog(finalDialogdialog){LinearLayoutll=newLinearLayout(ReaderActivity.this);ll.setOrientation(LinearLayout.VERTICAL);ll.setGravity(Gravity.CENTER_HORIZONTAL);ll.setBackgroundResource(R.drawable.dialog);LinearLayoutlln=newLinearLayout(ReaderActivity.this);lln.setOrientation(LinearLayout.HORIZONTAL);lln.setGravity(Gravity.CENTER);lln.setLayoutParams(newViewGroup.LayoutParams(200,LayoutParams.WRAP_CONTENT));TextViewtvTitle=newTextView(ReaderActivity.this);tvTitle.setText(R.string.music_name);tvTitle.setTextSize(20);tvTitle.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));lln.addView(tvTitle);ll.addView(lln);ListViewlv=newListView(this);lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);BaseAdapterba=newBaseAdapter()lv.setAdapter(ba);ll.addView(lv);dialog.setContentView(ll);}〔2〕音樂播放功能的實(shí)現(xiàn)音樂播放功能的實(shí)現(xiàn)代碼實(shí)現(xiàn)如下:publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){switch(arg2){case0:if(ReaderActivity.this.mp==null||Constant.I==R.raw.mh){Constant.I=R.raw.gsls;ReaderActivity.this.mp=MediaPlayer.create(ReaderActivity.this,R.raw.gsls);ReaderActivity.this.mp.setLooping(true);ReaderActivity.this.mp.start();}else{ReaderActivity.this.mp.release();ReaderActivity.this.mp=null;}ReaderActivity.this.goToReaderView();break;case1:if(ReaderActivity.this.mp==null||Constant.I==R.raw.gsls){Constant.I=R.raw.mh;ReaderActivity.thi

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論