基于Android手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)說明_第1頁(yè)
基于Android手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)說明_第2頁(yè)
基于Android手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)說明_第3頁(yè)
基于Android手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)說明_第4頁(yè)
基于Android手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)說明_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 / 49畢業(yè)設(shè)計(jì)題 目: 手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說明畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明原創(chuàng)性聲明本人重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文) ,是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作與取得的成果。盡我所知,除文中特別加以標(biāo)注和致的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得與其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對(duì)本研究提供過幫助和做出過貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說明并表示了意。作 者 簽 名:日 期:指導(dǎo)教師簽名: 日期:使用授權(quán)說明使用授權(quán)說明2 / 49本人完全了解大學(xué)關(guān)于收集、保存、使用畢

2、業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉咳荨W髡吆灻?日 期:學(xué)位論文原創(chuàng)性聲明學(xué)位論文原創(chuàng)性聲明本人重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的容外,本論文不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫的成果作品。對(duì)本文的研究做出重要貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)明。本人完全意識(shí)到本聲明的法律后果由本人承擔(dān)。作者簽名: 日期

3、: 年 月 日學(xué)位論文使用授權(quán)書學(xué)位論文使用授權(quán)書本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)大學(xué)可以將本學(xué)位論文的全部或部分容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)3 / 49制手段保存和匯編本學(xué)位論文。涉密論文按學(xué)校規(guī)定處理。作者簽名:日期: 年 月 日導(dǎo)師簽名: 日期: 年 月 日注意事項(xiàng)1.設(shè)計(jì)(論文)的容包括:1)封面(按教務(wù)處制定的標(biāo)準(zhǔn)封面格式制作)2)原創(chuàng)性聲明3)中文摘要(300 字左右) 、關(guān)鍵詞4)外文摘要、關(guān)鍵詞5)目次頁(yè)(附件不統(tǒng)一編入)6)論文主體部分:

4、引言(或緒論) 、正文、結(jié)論7)參考文獻(xiàn)8)致9)附錄(對(duì)論文支持必要時(shí))2.論文字?jǐn)?shù)要求:理工類設(shè)計(jì)(論文)正文字?jǐn)?shù)不少于 1 萬(wàn)字(不包括圖紙、程序清單等) ,文科類論文正文字?jǐn)?shù)不少于 1.2 萬(wàn)字。3.附件包括:任務(wù)書、開題報(bào)告、外文譯文、譯文原文(復(fù)印件) 。4.文字、圖表要求:1)文字通順,語(yǔ)言流暢,書寫字跡工整,打印字體與大小符合要求,無(wú)錯(cuò)別字,不準(zhǔn)請(qǐng)他人代寫2)工程設(shè)計(jì)類題目的圖紙,要求部分用尺規(guī)繪制,部分用計(jì)算機(jī)繪制,所有圖紙應(yīng)符合國(guó)家技術(shù)標(biāo)準(zhǔn)規(guī)。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不準(zhǔn)用徒手畫3)畢業(yè)論文須用 A4 單面打印,論文 50 頁(yè)以上的雙面打印4 / 4

5、94)圖表應(yīng)繪制于無(wú)格子的頁(yè)面上5)軟件工程類課題應(yīng)有程序清單,并提供電子文檔5.裝訂順序1)設(shè)計(jì)(論文)2)附件:按照任務(wù)書、開題報(bào)告、外文譯文、譯文原文(復(fù)印件)次序裝訂目錄目錄摘要摘要 11 項(xiàng)目開發(fā)目標(biāo) 11.1 項(xiàng)目來源 11.2 開發(fā)目標(biāo) 12 項(xiàng)目總體設(shè)計(jì) 22.1 技術(shù)框架設(shè)計(jì) 22.2 數(shù)據(jù)庫(kù)設(shè)計(jì) 22.3 功能框架設(shè)計(jì) 53 項(xiàng)目功能描述 83.1 軟件歡迎界面模塊功能描述 83.2 主界面功能描述 103.3 書籍管理模塊功能描述 123.4 文件瀏覽模塊功能描述 163.5 閱讀管理模塊功能描述 203.5.1 章節(jié)管理模塊功能描述 243.5.2 書簽管理模塊功能描述

6、 273.5.3 搜索管理模塊功能描述 283.6 設(shè)置管理模塊功能描述 293.7 使用幫助模塊功能描述 353.8 關(guān)于模塊功能描述 364 項(xiàng)目技術(shù)總結(jié) 384.1 技術(shù)創(chuàng)新與特點(diǎn) 384.2 個(gè)人收獲與體會(huì) 444.3 致 441 / 49摘要摘要在這個(gè)快節(jié)奏的時(shí)代,人們的空余時(shí)間越來越零碎,而且人們對(duì)智能手機(jī)的依賴越來越重,所以,一個(gè)擁有豐富功能且能隨時(shí)進(jìn)行電子書閱讀的電子書閱讀器的出現(xiàn),則是我們刻不容緩的事情。此軟件是在 Android 平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),此軟件的開發(fā)是通過了客戶需求分析階段以與技術(shù)可行性分析階段,然后進(jìn)行總體設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)編碼等階段。此軟件不僅具有基本的電子

7、書閱讀功能,而且還擁有豐富的實(shí)用功能設(shè)計(jì),例如目錄自動(dòng)生成以與閱讀界面設(shè)置、閱讀休息提醒等。經(jīng)過不斷的測(cè)試與完善,電子書閱讀器功能穩(wěn)定,并且在真機(jī)上對(duì)其進(jìn)行了測(cè)試與驗(yàn)證,基本上達(dá)到了用戶的需求標(biāo)準(zhǔn)。關(guān)鍵字:電子書閱讀器關(guān)鍵字:電子書閱讀器, , Android,Android,文件瀏覽文件瀏覽, ,書架書架 2 / 491 1 項(xiàng)目開發(fā)目標(biāo)項(xiàng)目開發(fā)目標(biāo)1.11.1 項(xiàng)目來源項(xiàng)目來源此次開發(fā)的項(xiàng)目是手機(jī)電子書閱讀器,屬于自選項(xiàng)目。隨著社會(huì)的發(fā)展,人們的生活節(jié)奏也越來越快空閑時(shí)間也越來越零碎,人們沒有了大段的時(shí)間來進(jìn)行書籍的閱讀,所以一款能利用零碎時(shí)間進(jìn)行隨時(shí)閱讀的軟件成為了我們的需求。而一款能在

8、人們隨身攜帶的手機(jī)上運(yùn)行的閱讀軟件成為了大家的選擇。以前我們看看雜志,小說都要去圖書館借閱,而且時(shí)間有限,很不方便;而在電腦上看雜志,看小說,文檔也是很不方便的。以此看來,一個(gè)好的手機(jī)閱讀器軟件的開發(fā)是相當(dāng)有必要的。1.21.2 開發(fā)目標(biāo)開發(fā)目標(biāo)手機(jī)電子書閱讀器的開發(fā)目標(biāo)就是讓用戶可以把零碎的空余時(shí)間有效的利用到書籍的閱讀上,而且用戶在沒有網(wǎng)路的情況下也可以正常的進(jìn)行書籍的閱讀,讓用戶擺脫書籍的笨重?cái)y帶不方便等確定,給予閱讀者更大的便利性更好的舒適性。此軟件是在 Android 平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),它的界面豐富簡(jiǎn)潔但是卻不簡(jiǎn)單,它包含了書架界面、文件查看界面、軟件設(shè)置界面、書籍閱讀界面等界面,

9、它的功能全面。其優(yōu)越性表現(xiàn)在:自動(dòng)掃描手機(jī)里的所有書籍、手動(dòng)從文件夾中選擇添加書籍、自動(dòng)為書籍生成章節(jié)目錄、添加查看書簽、全文關(guān)鍵詞搜索、閱讀主題選擇、閱讀字體大小設(shè)置等功能。此外,給用戶更清晰方便的界面,也是本軟件的出發(fā)點(diǎn)之一。2 2 項(xiàng)目總體設(shè)計(jì)項(xiàng)目總體設(shè)計(jì)2.12.1 技術(shù)框架設(shè)計(jì)技術(shù)框架設(shè)計(jì)手機(jī)電子書閱讀器采用了常見的三層架構(gòu),分別為 UI 層、業(yè)務(wù)邏輯層和數(shù)據(jù)層。UI 層:數(shù)據(jù)展示與管理、用戶交互、繪制、Adapter。業(yè)務(wù)邏輯層:數(shù)據(jù)加式(數(shù)據(jù)層的數(shù)據(jù)有時(shí)候需要進(jìn)行加工成 UI 層需要的數(shù)據(jù)) 、數(shù)據(jù)變化的通知機(jī)制數(shù)據(jù)層:數(shù)據(jù)訪問(SQLite、文件等) 、緩存(圖片、文件等) 、

10、配置文件(sharedperference)此軟件的開發(fā)環(huán)境:Windows7 + Eclipse4.2.0 + SDK。3 / 49UI ViewsData AdapterU UI IBLData ObserverB BL LFileSQLiteData ProviderMemory CacheLocal DataUtil/ConfigDataData圖 1 軟件框架結(jié)構(gòu)2.22.2 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)E-R 圖是直觀表示概念模型的工具,它有四個(gè)基本成分:矩形框,表示實(shí)體類型。菱形框,表示聯(lián)系類型。橢圓形框,表示實(shí)體類型和聯(lián)系類型的屬性。對(duì)于關(guān)鍵碼的屬性,在屬性名下劃一橫線。直線,聯(lián)系類型

11、與其涉與的試題類型之間以直線連接。4 / 49書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書n n書 書 書 書書 書 書 書1 1書 書 書 書圖 2 ER 圖數(shù)據(jù)庫(kù)使用了 2 個(gè)實(shí)體,分別為書籍、書簽。書籍與書簽的對(duì)應(yīng)關(guān)系為 1:n。在數(shù)據(jù)庫(kù)的設(shè)計(jì)方面,為了實(shí)現(xiàn)數(shù)據(jù)庫(kù)的完整性與一致性,我們使用了觸發(fā)器,在數(shù)據(jù)庫(kù)的選用上,選擇了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎的 SQLite 數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱為 eBook.db,共 2 個(gè)實(shí)體表,分別為書籍

12、表、書簽表。與書籍(books)實(shí)體類的屬性信息對(duì)應(yīng)的字段信息表如表 1 所示:字段名類型說明book_idINTEGER書籍編號(hào)book_nameTEXT書籍名稱book_pathTEXT書籍路徑file_sizeTEXT書籍大小last_readDATETIME閱讀時(shí)間book_shelfINTEGER所屬書籍read_percentageDOUBLE已讀比例posINTEGER閱讀位置表 1 書籍表書籍表(books)創(chuàng)建的 SQL 語(yǔ)句:CREATE TABLE books (book_id INTEGER PRIMARY KEY,book_name TEXT NOT NULL, bo

13、ok_path TEXT NOT NULL UNIQUE, file_size TEXT,last_read DATETIME DEFAULT(datetime(CURRENT_TIMESTAMP,localtime),5 / 49book_shelf INTEGER,read_percentage DOUBLE DEFAULT 0,pos INTEGER DEFAULT 0);與書簽(bookMarks)實(shí)體類的屬性信息對(duì)應(yīng)的字段信息表如表 2 所示:字段名類型說明idINTEGER書簽編號(hào)book_idINTEGER書籍編號(hào)percentDOUBLE位置比例contentTEXT書簽容po

14、sINTEGER書簽位置timeDATETIME添加時(shí)間表 2 書簽表書簽表(bookMarks)創(chuàng)建的 SQL 語(yǔ)句:CREATE TABLE bookMarks ( idINTEGERPRIMARY KEY AUTOINCREMENT,book_idINTEGER,percentDOUBLE,contentTEXT, posINTEGER, timeDATETIME DEFAULT ( datetime( CURRENT_TIMESTAMP, localtime );觸發(fā)器(fk_Delete)創(chuàng)建 SQL 語(yǔ)句:CREATE TRIGGER fk_DeleteBEFORE DELETE

15、ON booksFOR EACH ROWBEGINDELETEFROM bookMarksWHERE book_id = old.book_id;END2.32.3 功能框架設(shè)計(jì)功能框架設(shè)計(jì)6 / 49密碼管理章節(jié)管理文件掃描手機(jī)電子書閱讀器閱讀管理文本搜索書簽管理清空書簽刪除書簽書籍管理系統(tǒng)設(shè)置文件瀏覽添加書簽調(diào)節(jié)亮度主題選擇修改密碼取消密碼設(shè)置密碼生成章節(jié)刪除章節(jié)加入書籍重新掃描標(biāo)記文件退出確認(rèn)隱藏文件添加書籍清空書架分類排序添加書籍標(biāo)記文件文件排序夜間模式字體大小翻頁(yè)模式幫助關(guān)于歡迎模塊設(shè)置管理閱讀設(shè)置連續(xù)閱讀自動(dòng)歸類休息提醒空閑退出主界面圖 3 功能模塊圖手機(jī)電子書閱讀器軟件主要分為

16、8 個(gè)功能大模塊如圖 3 所示,分別是歡迎模塊、軟件主界面、書籍管理、閱讀管理、文件瀏覽、系統(tǒng)管理、使用幫助、關(guān)于。其中書籍模塊中還要文件掃描模塊,閱讀管理中有章節(jié)管理、書簽管理、搜索管理。系統(tǒng)設(shè)置中有密碼設(shè)置。其各個(gè)模塊的詳細(xì)設(shè)計(jì)如下:1.軟件歡迎模塊。該模塊主要實(shí)現(xiàn)的功能是,通過 Handler 來實(shí)現(xiàn)一個(gè) 2秒的緩沖界面,然后通過 SharedPreferences 讀取配置文件,判斷是否有密碼。如果有密碼則跳轉(zhuǎn)至密碼驗(yàn)證界面;如果沒有密碼則判斷是否為第一次使用此軟件,如果是第一次使用則跳轉(zhuǎn)至引導(dǎo)頁(yè)面。2.軟件主界面模塊。該模塊是一個(gè)通過 TabHost 標(biāo)簽組件來實(shí)現(xiàn)的一個(gè)分類管理功能

17、。本界面的標(biāo)簽在屏幕的最下方,分別是:文件管理、我的書架、我的設(shè)置。點(diǎn)擊不同的標(biāo)簽則顯示不同的界面,默認(rèn)顯示標(biāo)簽為“我的書架”,打開選項(xiàng)中會(huì)出現(xiàn)對(duì)應(yīng)的視圖。實(shí)現(xiàn)了將本程序關(guān)聯(lián)成手機(jī)默認(rèn)打開程序中,即從外部打開文本文件時(shí)選擇查看方式中會(huì)出現(xiàn)本軟件圖標(biāo)供用戶選擇以本軟件打開。3.書籍管理。該模塊是以書架的模式來展現(xiàn)書籍,并可以對(duì)書籍進(jìn)行一些操作,本模塊共有 3 個(gè)書架分別為:“最近閱讀” 、 “歷史閱讀” 、 “收藏閱讀” ,默認(rèn)顯示是“最近閱讀”書架。本模塊有導(dǎo)航按鈕和書籍選擇按鈕。當(dāng)彈出導(dǎo)航欄時(shí),則把書籍從每行顯示三本書籍調(diào)整到每行顯示兩本書籍。導(dǎo)航欄中與7 / 49三大項(xiàng):分類排序、添加書籍

18、、清空書籍。每項(xiàng)里面又有子菜單。當(dāng)點(diǎn)擊導(dǎo)航里的按鈕時(shí)會(huì)顯示子功能導(dǎo)航,當(dāng)再點(diǎn)擊其它按鈕時(shí),會(huì)收起前面的子功能導(dǎo)航,展開當(dāng)前的子功能。當(dāng)單擊書籍選擇按鈕時(shí)會(huì)彈出書籍選擇窗口,選擇里面的書架則進(jìn)入相應(yīng)的書架界面,同時(shí)還可以通過左右滑動(dòng)來切換書架界面。當(dāng)單擊書籍時(shí)會(huì)打開相應(yīng)的書籍閱讀界面,長(zhǎng)按某書籍時(shí)會(huì)彈出書籍操作窗口。4.文件瀏覽。該模塊使用 ListView 組件顯示文件目錄,不同的文件類型顯示不同的圖標(biāo)。最上面標(biāo)題欄有導(dǎo)航按鈕,當(dāng)點(diǎn)擊導(dǎo)航按鈕時(shí)會(huì)從左側(cè)彈出導(dǎo)航欄,導(dǎo)航欄中有標(biāo)記文件按鈕、分類排序按鈕和添加到書架按鈕,點(diǎn)擊標(biāo)記文件按鈕或長(zhǎng)按某文件或目錄時(shí)則切換到多選模式,其中有多選按鈕、反選按鈕

19、和取消按鈕;點(diǎn)擊分類排序則彈出子菜單,其中有按名稱排序、按大小排序、按時(shí)間排序和按類型排序;點(diǎn)擊添加到書架時(shí)如果為選擇文件則自動(dòng)進(jìn)入多選模式讓用戶進(jìn)行文件選擇,如果用戶未選擇則提示“請(qǐng)選擇書籍” ,進(jìn)行選擇是用戶可選擇文件或目錄,系統(tǒng)會(huì)自動(dòng)進(jìn)行掃描,把符合要求的文件添加到“最近書架”中,并彈出提示信息,其中有失敗個(gè)數(shù)、已存在個(gè)數(shù)和成功個(gè)數(shù)。在多選模式下點(diǎn)擊返回按鈕或點(diǎn)擊標(biāo)記文件會(huì)取消多選模式。非多選模式下,用戶點(diǎn)擊文件時(shí)本軟件會(huì)根據(jù)文件擴(kuò)展名來判斷打開文件方式,如果是文本文件則直接用本軟件打開,并把其添加到“最近書架”中,其它格式則調(diào)用對(duì)應(yīng)的軟件打開,如果是未識(shí)別的類型則提示“沒有打開此文件的

20、應(yīng)用” 。5.閱讀管理。該模塊通過自定義一個(gè) View 視圖來顯示書頁(yè),通過自定義類來讀取文本容并通過 onDraw()方法把文件名、文本容、電量信息、時(shí)間信息和已讀百分比進(jìn)行繪制成圖片,并通過 View 來把繪制的圖片顯示出來。第一次進(jìn)入閱讀頁(yè)面是會(huì)有顯示引導(dǎo)頁(yè)面來指導(dǎo)用戶如何讀本頁(yè)面進(jìn)行操作。本頁(yè)面操作包括點(diǎn)擊事件和滑動(dòng)事件,點(diǎn)擊左側(cè)屏幕進(jìn)行向上翻頁(yè),點(diǎn)擊右側(cè)屏幕進(jìn)行向下翻頁(yè),點(diǎn)擊屏幕中間畫出菜單選項(xiàng)。此菜單是使用 PopupWindow 組件實(shí)現(xiàn),菜單分上下兩部分,上面的菜單有返回按鈕、屏幕亮度調(diào)節(jié)按鈕和添加書簽按鈕;下面的菜單有主題選擇按鈕、搜索按鈕、書簽按鈕、目錄按鈕、字體大小調(diào)節(jié)按

21、鈕、翻頁(yè)方式按鈕、夜間模式切換按鈕和退出軟件按鈕。6.系統(tǒng)設(shè)置。系統(tǒng)設(shè)置模塊包括閱讀設(shè)置和系統(tǒng)設(shè)置。閱讀設(shè)置中有連續(xù)閱讀模式、閱讀完成時(shí)自動(dòng)歸類、閱讀休息提醒和閱讀空閑退出。連續(xù)閱讀模式:下次啟動(dòng)直接進(jìn)入上次閱讀的界面進(jìn)行繼續(xù)閱讀;閱讀完成時(shí)自動(dòng)歸類:當(dāng)書籍閱讀到最后一頁(yè)后對(duì)此書籍自動(dòng)移至“歷史閱讀”書架中;閱讀休息提醒:設(shè)置一個(gè)時(shí)間,當(dāng)用戶在閱讀頁(yè)面停留至這個(gè)時(shí)間時(shí)會(huì)彈出個(gè)提示框來提醒用戶進(jìn)行休息;閱讀空閑退出:設(shè)置一個(gè)時(shí)間,當(dāng)用戶停留在閱讀界面并且為對(duì)其未進(jìn)行任何操作至這個(gè)時(shí)間時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉本軟件。系統(tǒng)設(shè)置中有顯示隱藏文件、使用軟件密碼、退出確認(rèn)、使用幫助和關(guān)于。顯示隱藏文件:當(dāng)用戶選

22、擇此設(shè)置后會(huì)在下次啟動(dòng)本軟件時(shí)在文件瀏覽中顯示隱藏文件;使用軟件密碼:用戶可以對(duì)此軟件進(jìn)行密碼設(shè)置;退出時(shí)確認(rèn):當(dāng)選擇此設(shè)置后,退出軟件時(shí)會(huì)顯示一個(gè)確認(rèn)框進(jìn)行退出確認(rèn),未選擇此設(shè)置時(shí)則會(huì)直接退出本軟件;使用幫助:顯示本軟件的幫助信息;關(guān)于:顯示關(guān)于本軟件的信息。本軟件的設(shè)置信息全部使用 SharedPreferences 存儲(chǔ)。7.使用幫助。該模塊通過讀取幫助文件在 TextView 中顯示,并且為8 / 49TextView 添加滾動(dòng)條。文件中含有本軟件的特點(diǎn)、功能介紹、操作說明等, 。8.關(guān)于。該模塊的主要功能是通過一個(gè)簡(jiǎn)單的彈出窗口來顯示本軟件的版本信息、聯(lián)系方式。3 3 項(xiàng)目功能描述項(xiàng)

23、目功能描述3.13.1 軟件歡迎界面模塊功能描述軟件歡迎界面模塊功能描述圖 4 所示為歡迎界面模塊,此模塊作用是為了使軟件的進(jìn)入更連貫自然,讓用戶不感覺界面的出現(xiàn)突兀。兩秒后跳入其它頁(yè)面,如果有密碼跳入密碼驗(yàn)證頁(yè)面如圖 6 所示,如果是第一次啟動(dòng)跳入引導(dǎo)頁(yè)面如圖 5 所示。圖 4 歡迎界面圖 5 引導(dǎo)界面 圖 6 密碼驗(yàn)證界面關(guān)于歡迎頁(yè)面啟動(dòng)的代碼如下:newnew Handler().postDelayed(newnew Runnable() Overridepublicvoidpublicvoid run() Intent intent=nullnull;initSaveData();/判

24、斷是否有密碼ifif(share.getString(mi_ma, ).equals()/判斷是否為第一次啟動(dòng)ifif(share.getBoolean(first, truetrue) edit.putBoolean(first, falsefalse);edit mit();intent = newnew Intent(WelcomeActivity.thisthis,GuideMain.classclass);9 / 49elseelseintent = newnew Intent(WelcomeActivity.thisthis,ActivityMain.classclass);els

25、eelseintent = newnew Intent(WelcomeActivity.thisthis, GestureVerifyActivity.classclass);intent.putExtra(from_activity, 0);startActivity(intent);finish();, 2000);關(guān)于引導(dǎo)界面滑動(dòng)事件代碼:Overridepublicbooleanpublicboolean onTouch(View v, MotionEvent event) switchswitch (event.getAction() casecase MotionEvent.ACT

26、ION_DOWN: / 手指按下的 X 坐標(biāo)downX = event.getX();breakbreak;casecase MotionEvent.ACTION_UP: floatfloat lastX = event.getX();/ 抬起的時(shí)候的 X 坐標(biāo)大于按下的時(shí)候就顯示上一圖片ifif (lastX downX) ifif (currentPosition 0) / 設(shè)置動(dòng)畫,mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.left_in);mImageSwitc

27、her.setOutAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.right_out);currentPosition-;mImageSwitcher.setImageResource(imgIdscurrentPosition% imgIds.length);setImageBackground(currentPosition); elseelse Toast.makeText(getApplication(), 向右滑動(dòng),Toast.LENGTH_SHORT).show();10 / 49ifif (last

28、X downX) ifif (currentPosition imgIds.length - 1) mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.right_in);mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.left_out);currentPosition+;mImageSwitcher.setImageResource(imgIdscurren

29、tPosition);setImageBackground(currentPosition); elseelse Intent intent = newnew Intent(GuideMain.thisthis, ActivityMain.classclass);startActivity(intent);finish();breakbreak;returntruereturntrue;通過 xml 設(shè)置引導(dǎo)頁(yè)面動(dòng)畫,代碼如下(以向左滑動(dòng)為例): 3.23.2 主界面功能描述主界面功能描述圖 7 所示是軟件的主頁(yè)面,這是一個(gè)通過 TabHost 標(biāo)簽組件來實(shí)現(xiàn)的一個(gè)分類管理功能。本界面的標(biāo)簽在

30、屏幕的最下方,分別是文件管理、我的書架、我的設(shè)置。點(diǎn)擊不同的標(biāo)簽則顯示不同的界面,默認(rèn)顯示標(biāo)簽為我的書架,打11 / 49開選項(xiàng)中會(huì)出現(xiàn)對(duì)應(yīng)的視圖。實(shí)現(xiàn)了將本程序關(guān)聯(lián)成手機(jī)默認(rèn)打開程序中,即從外部打開文本文件時(shí)選擇查看方式中會(huì)出現(xiàn)本軟件圖標(biāo)供用戶選擇以本軟件打開。圖 7 軟件主界面初始化選項(xiàng)卡代碼如下:privatevoidprivatevoid initTabs() myTabHost = (TabHost) findViewById(R.id.TabHost1);myTabHost.setup(thisthis.getLocalActivityManager();/添加文件管理選項(xiàng)myTa

31、bHost.addTab(myTabHost.newTabSpec(tab_file).setIndicator(composeLayout(文件管理, R.drawable.folders).setContent(newnew Intent(thisthis, FileExplorerActivity.classclass).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);/添加我的書架選項(xiàng)myTabHost.addTab(myTabHost.newTabSpec(tab_books).setIndicator(composeLayout(我的書架, 12

32、/ 49R.drawable.books).setContent(newnew Intent(thisthis, BookShelf.classclass).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);/添加我的設(shè)置選項(xiàng)myTabHost.addTab(myTabHost.newTabSpec(tab_setting).setIndicator(composeLayout(我的設(shè)置, R.drawable.setting).setContent(newnew Intent(thisthis, MySetting.classclass).addFlags(I

33、ntent.FLAG_ACTIVITY_CLEAR_TOP);myTabHost.setCurrentTab(1);myTabHost.setOnTabChangedListener(newnew OnTabChangedListener();updateTab(myTabHost);將程序關(guān)聯(lián)成 Android 系統(tǒng)默認(rèn)打開程序代碼: 接收從外部傳來的參數(shù)并處理的代碼:Intent intent = getIntent();String action = intent.getAction();ifif (intent.ACTION_VIEW.equals(action) String res

34、_path = ;trytry res_path = URLDecoder.decode(intent.getDataString(), utf8); catchcatch (UnsupportedEncodingException e) e.printStackTrace();3.33.3 書籍管理模塊功能描述書籍管理模塊功能描述13 / 49圖 8 所示是書籍管理主頁(yè)面,最上面標(biāo)題欄有導(dǎo)航按鈕和書籍選擇按鈕。當(dāng)點(diǎn)擊導(dǎo)航按鈕時(shí)會(huì)從左側(cè)彈出導(dǎo)航欄如圖 9 所示,并把書籍從每行顯示三個(gè)調(diào)整到每行顯示兩個(gè)。當(dāng)點(diǎn)擊導(dǎo)航里的按鈕時(shí)會(huì)顯示子功能導(dǎo)航,當(dāng)再點(diǎn)擊其它按鈕時(shí),會(huì)收起前面的子功能導(dǎo)航,展開當(dāng)前的

35、子功能。當(dāng)單擊書籍選擇按鈕時(shí)會(huì)彈出書籍選擇窗口,選擇里面的書架則進(jìn)入相應(yīng)的書架界面,同時(shí)還可以通過左右滑動(dòng)來切換書架界面。當(dāng)單擊書籍時(shí)會(huì)打開相應(yīng)的書籍閱讀界面,長(zhǎng)按某書籍時(shí)會(huì)彈出書籍操作窗口如圖 10 所示,書籍操作窗口中有刪除閱讀記錄、刪除閱讀記錄和文件、移動(dòng)到歷史書架、移動(dòng)到收藏書籍、查看書籍詳情和分享本書,不同書架中的操作項(xiàng)略有不同。 圖 8 書架效果頁(yè)面圖 9 導(dǎo)航欄頁(yè)面 圖 10 書籍操作窗口初始化 ViewPager 的核心代碼如下:privatevoidprivatevoid InitViewPager() mPager = (ViewPager) findViewById(R.

36、id.vPager);listViews = newnew ArrayList();Intent intent = newnew Intent(BookShelf.thisthis, BookShelfActivity.classclass);intent.putExtra(book_shelf, MyConstant.BOOKS_RECENTLY);listViews.add(getView(BookShelfRecently, intent);Intent intent2=newnew Intent(BookShelf.thisthis, BookShelfActivity.classcl

37、ass);intent2.putExtra(book_shelf, MyConstant.BOOKS_HISTORY);listViews.add(getView(BookShelfHistory, intent2);Intent intent3=newnew Intent(BookShelf.thisthis, BookShelfActivity.classclass);intent3.putExtra(book_shelf, MyConstant.BOOKS_COLLECT);listViews.add(getView(BookShelfCollect, intent3);14 / 49a

38、dapter = newnew MyPagerAdapter(listViews);mPager.setAdapter(adapter);mPager.setCurrentItem(0);mPager.setOnPageChangeListener(newnew MyOnPageChangeListener();單擊書籍跳轉(zhuǎn)至閱讀頁(yè)面進(jìn)行閱讀代碼如下:privatevoidprivatevoid goReadActivity(BookInfo tem)ifif(newnew File(tem.bookPath).exists() Intent intent = newnew Intent(Bo

39、okShelfActivity.thisthis, ReaderActivity.classclass);bundle = newnew Bundle(); bundle.putInt(id, tem.bookId); bundle.putString(name, tem.bookName); bundle.putString(path, tem.bookPath); bundle.putInt(pos, tem.pos); bundle.putDouble(percentage, tem.readPercentage); intent.putExtras(bundle); startActi

40、vity(intent); elseelsebooksTableOperate.delete(tem.bookId);adapter.notifyDataSetChanged();Toast.makeText(BookShelfActivity.thisthis, 書籍文件不存在,移除記錄, Toast.LENGTH_SHORT).show();書籍排序的核心代碼(以按時(shí)間排序?yàn)槔篠impleDateFormat format = newnew SimpleDateFormat(yyyy-MM-dd HH:mm:ss);trytry longlong time1 = format.pars

41、e(book1.lastRead).getTime();longlong time2 = format.parse(book2.lastRead).getTime();ifif (time1 time2) returnreturn -1; elseelse returnreturn book1.bookName pareToIgnoreCase(book2.bookName); catchcatch (ParseException e) e.printStackTrace();15 / 49分享本書的代碼如下:Intent sendIntent = newnew Intent(); sendI

42、ntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, +selectBook.bookName+這本書還不錯(cuò),分享給大家看看!); sendIntent.setType(text/plain); startActivity(sendIntent);點(diǎn)擊添加書籍中的快速掃描按鈕,進(jìn)入此界面開始掃描,通過自定義文件名過濾類來進(jìn)行搜索并顯示正在掃描界面,其中有掃描到的文件數(shù)目如圖 11 所示。掃描完成后使用 ListView 組件顯示掃描結(jié)果,最上面標(biāo)題欄有返回按鈕、我的書籍標(biāo)題、重新掃描按鈕。當(dāng)長(zhǎng)按某

43、文件時(shí)則切換到多選模式如圖 12 所示,最上面標(biāo)題欄改變?yōu)闃?biāo)記全部按鈕、選中的文件數(shù)目顯示、加入書架按鈕、取消按鈕。多選模式下可以點(diǎn)擊文件進(jìn)行逐個(gè)選擇,也可進(jìn)行全選和取消全選操作。當(dāng)用戶選擇是標(biāo)題欄上會(huì)有對(duì)應(yīng)的已選文件個(gè)數(shù)顯示。選好之后點(diǎn)擊加入書架將會(huì)把選中的文件加入最近書架中,也可以點(diǎn)擊取消則取消多選模式。圖 11 正在掃描圖 12 多選模式時(shí)時(shí)顯示掃描到的文件個(gè)數(shù)部分代碼:16 / 49Handler handler = newnew Handler() publicvoidpublicvoid handleMessage(Message msg) ifif (msg.what != -1

44、) numText.setText( + msg.what); elseelse listData = listTem;ll.setVisibility(View.GONE);supersuper.handleMessage(msg);classclass UpdataBooks extendsextends Thread Overridepublicvoidpublicvoid run() handler.sendEmptyMessage(1);getAllFiles(file);handler.sendEmptyMessage(-1);掃描文本文件部分代碼:publicvoidpublic

45、void getAllFiles(File root) File files = root.listFiles(newnew MyFileFilter(falsefalse,txt);ifif (files != nullnull) forfor (File f : files) ifif (f.isDirectory() getAllFiles(f); elseifelseif ( f.length() 1024 * 100) Map tem = newnew HashMap();tem.put(fileName, f.getName();tem.put(filePath, f.getAbs

46、olutePath();tem.put(fileSize, getFileSize(f.length();num+;handler.sendEmptyMessage(num);listTem.add(tem);isSelect.add(falsefalse);3.43.4 文件瀏覽模塊功能描述文件瀏覽模塊功能描述17 / 49下面是文件瀏覽模塊主頁(yè)面,使用 ListView 組件顯示文件目錄,不同的文件類型顯示不同的圖標(biāo)如圖 13 所示。最上面標(biāo)題欄有導(dǎo)航按鈕,當(dāng)點(diǎn)擊導(dǎo)航按鈕時(shí)會(huì)從左側(cè)彈出導(dǎo)航欄如圖 14 所示,導(dǎo)航欄中有標(biāo)記文件按鈕、分類排序按鈕和添加到書架按鈕,點(diǎn)擊標(biāo)記文件按鈕或長(zhǎng)按某文件

47、或目錄時(shí)則切換到多選模式,其中有多選按鈕、反選按鈕和取消按鈕;點(diǎn)擊分類排序則彈出子菜單,其中有按名稱排序、按大小排序、按時(shí)間排序和按類型排序;點(diǎn)擊添加到書架時(shí)如果為選擇文件則自動(dòng)進(jìn)入多選模式讓用戶進(jìn)行文件選擇,如果用戶未選擇則提示“請(qǐng)選擇書籍” ,進(jìn)行選擇是用戶可選擇文件或目錄,系統(tǒng)會(huì)自動(dòng)進(jìn)行掃描,把符合要求的文件添加到“最近書架”中,并彈出提示信息,其中有失敗個(gè)數(shù)、已存在個(gè)數(shù)和成功個(gè)數(shù)。在多選模式下點(diǎn)擊返回按鈕或點(diǎn)擊標(biāo)記文件會(huì)取消多選模式。非多選模式下,用戶點(diǎn)擊文件時(shí)本軟件會(huì)根據(jù)文件擴(kuò)展名來判斷打開文件方式如圖 15 所示,如果是文本文件則直接用本軟件打開,并把其添加到“最近書架”中,其它格

48、式則調(diào)用對(duì)應(yīng)的軟件打開,如果是未識(shí)別的類型則提示“沒有打開此文件的應(yīng)用” 。 圖 13 文件瀏覽頁(yè)面圖 14 文件瀏覽導(dǎo)航欄圖 15 打開視頻文件文件路徑導(dǎo)航實(shí)現(xiàn)代碼:publicvoidpublicvoid navigationBar() String strPath = nullnull;trytry strPath = currentParent.getCanonicalPath().split(/); catchcatch (IOException e1) e1.printStackTrace();tvpath.removeAllViews();forfor (intint i = 1

49、; i 1) ifif (i = 2) imageText.setPadding(10, 0, 20, 0);imageText.setText(存儲(chǔ)器); elseelse imageText.setPadding(10, 0, 20, 0);imageText.setText(strPathi);ifif (i = strPath.length - 1) linyou.setBackgroundResource(R.drawable.rights_); elseelse linyou.setBackgroundResource(R.drawable.middle);linyou.setOn

50、ClickListener(newnew imageTextListener(i,strPath.length, strPath);frameLayout.addView(linyou);frameLayout.addView(imageText);tvpath.addView(frameLayout);不同類型文件打開方式的核心代碼如下:privatevoidprivatevoid OpenPhoto(String work_answer) Intent intent = nullnull;finalfinal String res_path = work_answer;String suf

51、fixName=res_path.substring(res_path.lastIndexOf(.)+ 1).toLowerCase();ifif (!newnew File(res_path).exists() Toast.makeText(thisthis, suffixName + 資源不存在,Toast.LENGTH_SHORT).show(); elseelse /選擇打開方式ifif (doc.equals(suffixName) | docx.equals(suffixName) intent = Utils.getWordFileIntent(res_path);elseife

52、lseif (ppt.equals(suffixName)|pptx.equals(suffixName)intent = Utils.getPptFileIntent(res_path);19 / 49elseifelseif (xls.equals(suffixName)|xlsx.equals(suffixName)intent = Utils.getExcelFileIntent(res_path); elseifelseif (jpg.equals(suffixName) | png.equals(suffixName)|gif.equals(suffixName)|bmp.equa

53、ls(suffixName) intent = Utils.getImageFileIntent(res_path); elseifelseif (pdf.equals(suffixName) intent = Utils.getPdfFileIntent(res_path); elseifelseif (mp3.equals(suffixName) intent = Utils.getAudioFileIntent(res_path); elseifelseif (html.equals(suffixName) intent = Utils.getHtmlFileIntent(res_pat

54、h); elseifelseif (chm.equals(suffixName) intent = Utils.getChmFileIntent(res_path); elseifelseif (mp4.equals(suffixName) | 3gp.equals(suffixName)|wmv.equals(suffixName)|flv.equals(suffixName)|rmvb.equals(suffixName)|avi.equals(suffixName)intent = Utils.getVideoFileIntent(res_path); elseifelseif (txt

55、.equals(suffixName) /設(shè)置文本打開方式為當(dāng)前應(yīng)用intint p1 = res_path.lastIndexOf(/);intint p2 = res_path.lastIndexOf(.);longlong mFileSize = newnew File(res_path).length();BookDatabaseHelper helper = newnew BookDatabaseHelper(FileExplorerActivity.thisthis);SQLiteDatabase db = helper.getWritableDatabase();BooksTab

56、leOperate booksTableOperate = newnewBooksTableOperate(db);booksTableOperate.insert(res_path.substring(p1 + 1, p2),res_path, getFileSize(mFileSize);ActivityMain.myTabHost.setCurrentTab(1);helper = newnew BookDatabaseHelper(FileExplorerActivity.thisthis);db = helper.getWritableDatabase();booksTableOpe

57、rate = newnew BooksTableOperate(db);BookInfo book = booksTableOperate.getBook(res_path);Intent it = newnew Intent(FileExplorerActivity.thisthis,ReaderActivity.classclass);Bundle bundle = newnew Bundle();bundle.putInt(id, book.bookId);bundle.putString(name, book.bookName);bundle.putString(path, res_p

58、ath);bundle.putInt(pos, book.pos);it.putExtras(bundle);20 / 49startActivity(it);db.close();returnreturn; elseifelseif (apk.equals(suffixName) intent = newnew Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(newnew File(suffixName),application/vnd.android.package-archive);startActivity(i

59、ntent); elseelseToast.makeText(thisthis, 不支持 + suffixName + 文件格式, Toast.LENGTH_SHORT).show();trytry thisthis.startActivity(intent); catchcatch (Exception e) Toast.makeText(thisthis, 沒有打開此文件的應(yīng)用, Toast.LENGTH_SHORT).show();e.printStackTrace();3.53.5 閱讀管理模塊功能描述閱讀管理模塊功能描述圖 16 所示是電子書閱讀主要頁(yè)面,本頁(yè)面通過自定義一個(gè) Vie

60、w 視圖來顯示書頁(yè),通過自定義類來讀取文本容并通過 onDraw()方法把文件名、文本容、電量信息、時(shí)間信息和已讀百分比進(jìn)行繪制成圖片,并通過 View 來把繪制的圖片顯示出來。第一次進(jìn)入閱讀頁(yè)面是會(huì)有顯示引導(dǎo)頁(yè)面來指導(dǎo)用戶如何讀本頁(yè)面進(jìn)行操作如圖 17 所示。本頁(yè)面操作包括點(diǎn)擊事件和滑動(dòng)事件,點(diǎn)擊左側(cè)屏幕進(jìn)行向上翻頁(yè),點(diǎn)擊右側(cè)屏幕進(jìn)行向下翻頁(yè),點(diǎn)擊屏幕中間畫出菜單選項(xiàng)如圖18 所示。21 / 49 圖 16 閱讀引導(dǎo)界面 圖 17 閱讀引導(dǎo)頁(yè)面 圖 18 閱讀菜單此菜單是使用 PopupWindow 組件實(shí)現(xiàn),菜單分上下兩部分,上面的菜單有返回按鈕、屏幕亮度調(diào)節(jié)按鈕和添加書簽按鈕;下面的菜單

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論