版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 基于Android平臺(tái)的電子書管理及閱讀系統(tǒng),是采用JAVA語(yǔ)言開(kāi)發(fā)的一個(gè)小型應(yīng)用系統(tǒng)。在科技日益發(fā)展的今天,社會(huì)競(jìng)爭(zhēng)越來(lái)越激烈,3G時(shí)代已經(jīng)慢慢融入了我們的日常生活。手機(jī)已經(jīng)成為人們?nèi)粘I钪胁豢扇鄙俚囊徊糠郑绕涫窃陔娮赢a(chǎn)品日新月異的今天,我們?cè)谄綍r(shí)隨處可見(jiàn)的電子產(chǎn)品中,手機(jī)無(wú)疑是一個(gè)最大的用戶集,而各大廠商智能手機(jī)則依
2、舊是電子商場(chǎng)的一個(gè)耀眼明星。其中代表作有微軟的WP7系統(tǒng),蘋果的IOS系統(tǒng),但是其中Google的Android系統(tǒng)以其開(kāi)放的源代碼和方便簡(jiǎn)潔的操作成為手機(jī)領(lǐng)域的領(lǐng)頭羊。所以我選擇了這個(gè)題目作為畢業(yè)設(shè)計(jì)的題目,并希望再進(jìn)一步完善系統(tǒng)后將系統(tǒng)發(fā)布到Google android market上供用戶下載使用。</p><p> 據(jù)了解,越來(lái)越多的年輕人喜歡閱讀小說(shuō),本系統(tǒng)則根據(jù)用戶需求及平臺(tái)的特性而設(shè)計(jì)的,在Goo
3、gle Android SDK2.1環(huán)境下,運(yùn)用Eclipse,PhotoShop等相關(guān)工具進(jìn)行開(kāi)發(fā)。同時(shí)解決了大型書籍載入、動(dòng)態(tài)分頁(yè)等眾多技術(shù)難題。</p><p> 該系統(tǒng)在Android手機(jī)上運(yùn)行,由于手機(jī)性能及內(nèi)存的瓶頸,在設(shè)計(jì)方面,本系統(tǒng)進(jìn)行了相應(yīng)的優(yōu)化處理,以減少不必要的內(nèi)存損耗,盡可能的使其在手機(jī)上能夠流暢運(yùn)行,增強(qiáng)友好度,方便用戶使用。</p><p> 關(guān)鍵詞:電子書
4、,安卓,JAVA。</p><p><b> Abstract</b></p><p> Based on the E-book management and reading system of Android platform is a small application system which adopt to a development language
5、of JAVA . Increasing development in technology today , more and more competitive , 3G era has been slowly integrated into our daily lives . Mobile phones have become an indispensable daily part of life , especially in th
6、e rapidly changing electronic products today , we usually ubiquitous in electronic products , mobile phone users is undoubtedly one of the lar</p><p> It is understood that more and more young people like t
7、o read novels , the system is based on user needs and characteristics of platform design , in Google Android SDK2.1 environment , the use of the Eclipse , PhotoShop and other tools for development . While addressing a la
8、rge load of books , dynamic pages , and many other technical problems . </p><p> The system runs on Android phones , because mobile performance and memory bottlenecks , in terms of design , the system was o
9、ptimized accordingly , to reduce unnecessary memory loss , as much as possible so that it can run smoothly on the phone , and enhance Friendliness , user-friendly . </p><p> Key words: E-book, Android, JAVA
10、.目錄</p><p><b> 1 前言1</b></p><p><b> 2 可行性分析2</b></p><p> 2.1 開(kāi)發(fā)前景2</p><p> 2.2 市場(chǎng)可行性2</p><p> 2.3 技術(shù)可行性3</p><p
11、> 2.3.1 Android基本框架3</p><p> 2.3.2 Android系統(tǒng)的四大組件5</p><p><b> 3 系統(tǒng)分析7</b></p><p> 3.1 功能需求(用例圖分析)7</p><p> 3.1.1 書庫(kù)管理需求7</p><p>
12、3.1.2 閱讀的基本功能需求8</p><p> 3.1.3 SD卡內(nèi)電子書清單管理需求9</p><p> 3.2 系統(tǒng)流程圖和結(jié)構(gòu)圖10</p><p> 3.3 系統(tǒng)界面需求12</p><p> 3.4 系統(tǒng)性能需求12</p><p> 3.5 運(yùn)行環(huán)境需求12</p>
13、<p> 4 數(shù)據(jù)庫(kù)設(shè)計(jì)13</p><p> 4.1 Android SQLite概述13</p><p> 4.2 Android SQLite特征及內(nèi)部結(jié)構(gòu)13</p><p> 4.3 數(shù)據(jù)庫(kù)概念模型16</p><p> 4.4 數(shù)據(jù)庫(kù)字段設(shè)計(jì)17</p><p> 4.4.1
14、 電子書信息表17</p><p> 4.4.2 書簽信息表18</p><p> 5 系統(tǒng)功能詳細(xì)設(shè)計(jì)19</p><p> 5.1 系統(tǒng)主界面功能實(shí)現(xiàn)19</p><p> 5.1.1 系統(tǒng)主界面19</p><p> 5.1.2 工具欄21</p><p> 5.1
15、.3 OptionsMenu22</p><p> 5.2 手機(jī)擴(kuò)展卡訪問(wèn)22</p><p> 5.2.1本地書目的顯示22</p><p> 5.2.2 刷新本地書目24</p><p> 5.2.3 本地書目的導(dǎo)入25</p><p> 5.3 文章載入及翻頁(yè)實(shí)現(xiàn)27</p>
16、<p> 5.3.1 文章載入28</p><p> 5.3.2 手勢(shì)識(shí)別30</p><p> 5.4 閱讀設(shè)置功能實(shí)現(xiàn)31</p><p> 5.4.1 字體設(shè)置32</p><p> 5.4.2 亮度設(shè)置33</p><p> 5.4.3 書簽34</p><
17、p> 5.4.4 跳轉(zhuǎn)36</p><p> 5.4.5 橫、豎屏翻頁(yè)切換37</p><p> 5.5 其它功能點(diǎn)實(shí)現(xiàn)38</p><p> 5.5.1 回退鍵的重寫38</p><p> 5.5.2 快捷方式及書目刪除39</p><p> 5.5.3 SharedPreferences
18、40</p><p><b> 6 系統(tǒng)測(cè)試42</b></p><p> 6.1 測(cè)試環(huán)境42</p><p> 6.2 超大文件載入42</p><p> 6.3 書目損壞或?yàn)榭?2</p><p> 6.4 關(guān)于 43</p><p><b
19、> 7 總結(jié)44</b></p><p><b> 致謝45</b></p><p><b> 參考文獻(xiàn)46</b></p><p><b> 1 前言</b></p><p> 當(dāng)今社會(huì)的生活節(jié)奏越來(lái)越快,人們對(duì)手機(jī)的要求也越來(lái)越高,由于手機(jī)
20、市場(chǎng)的迅猛發(fā)展,使得手機(jī)操作系統(tǒng)也出現(xiàn)了不同的種類,現(xiàn)在的市場(chǎng)上熱門手機(jī)操作系統(tǒng)有三個(gè),微軟的WP7系統(tǒng),蘋果的IOS系統(tǒng),以及谷歌的Android系統(tǒng),Android一次的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。眾多手機(jī)品牌靠著Android系統(tǒng)備受推崇,其中值得一
21、提的是摩托羅拉公司,就在2009年11月憑借其一款搭載Android平臺(tái)的Droid手機(jī),兩個(gè)月內(nèi)突破百萬(wàn)臺(tái),擊敗了蘋果的iphone 3GS,被《時(shí)代》雜志評(píng)為“年度最佳科技產(chǎn)品”。因此告別了兩年多的低迷態(tài)勢(shì),從而走出泥潭。</p><p> Android以其特有的開(kāi)放性優(yōu)勢(shì)越來(lái)越受到人們和智能手機(jī)廠商的關(guān)注,并吸引了大量的第三方開(kāi)發(fā)者加入,本次設(shè)計(jì)運(yùn)用Android平臺(tái)手機(jī)作為研究開(kāi)發(fā)對(duì)象,配合Java語(yǔ)
22、言程序設(shè)計(jì)以及面向?qū)ο笏枷朐O(shè)計(jì)了一款電子書管理及閱讀系統(tǒng)。本系統(tǒng)實(shí)現(xiàn)了以下功能:電子書的導(dǎo)入及管理、手勢(shì)識(shí)別、動(dòng)態(tài)載入圖書、字體、亮度、閱讀模式、書簽、跳轉(zhuǎn)等。在實(shí)現(xiàn)時(shí)遵循可靠性、安全性、友好性,從而確定一套可行方案。本次設(shè)計(jì)是對(duì)所學(xué)只是的綜合運(yùn)用,把理論知識(shí)和實(shí)現(xiàn)相結(jié)合,最終將技術(shù)難點(diǎn)一一攻破。本論文大多是在將設(shè)計(jì)于實(shí)現(xiàn)的方法,并沒(méi)有大量羅列具體實(shí)現(xiàn)的代碼。</p><p><b> 2 可行性分析
23、</b></p><p><b> 2.1 開(kāi)發(fā)前景</b></p><p> 目前,在智能手機(jī)市場(chǎng)上的操作系統(tǒng)主要有NOKIA的Symbian(塞班)、微軟的Windows mobile、Google的Android(安卓)、蘋果的IOS、黑莓Blackberry的RIM等。</p><p> 在全球手機(jī)操作系統(tǒng)排行中,An
24、droid被看好是相當(dāng)紅的話題,美國(guó)市場(chǎng)研究公司IDC發(fā)布報(bào)告稱,Android操作系統(tǒng)有望在未來(lái)幾年席卷智能手機(jī)市場(chǎng),增速將超過(guò)所有競(jìng)爭(zhēng)對(duì)手。IDC認(rèn)為,從現(xiàn)在起到2013年,Android有望成為增速最快的手機(jī)操作系統(tǒng),屆時(shí)將成為全球第二大智能手機(jī)操作系統(tǒng)。之所以出現(xiàn)這種變化,是因?yàn)樵絹?lái)越多的手機(jī)廠商開(kāi)始采用Android這一免費(fèi)的開(kāi)源系統(tǒng)。</p><p> 總之,Android系統(tǒng)平臺(tái)可以說(shuō)是當(dāng)前被關(guān)注
25、度最高的智能手機(jī)系統(tǒng)平臺(tái)之一。其強(qiáng)大的開(kāi)放性、良好的安全穩(wěn)定性、強(qiáng)悍而犀利的功能及眾多實(shí)力廠商的支持,可以說(shuō)是潛力巨大,魅力無(wú)限。</p><p><b> 2.2 市場(chǎng)可行性</b></p><p> Android操作系統(tǒng)得到了全球眾多業(yè)界重量級(jí)廠商的支持。隨著Android智能手機(jī)平臺(tái)的推出,很快便在其周圍匯集了全球移動(dòng)領(lǐng)域一大批的重量級(jí)廠商,并組成了開(kāi)放手
26、機(jī)聯(lián)盟(Open Handset Alliance),包括摩托羅拉、PHILIPS、三星、HTC等在內(nèi)的34家企業(yè)。由于Android是一個(gè)完全開(kāi)源的智能手機(jī)系統(tǒng)平臺(tái),得到了業(yè)內(nèi)眾多資深廠商的支持,并且Android手機(jī)操作簡(jiǎn)單,性能強(qiáng)大,因此基于Android平臺(tái)的高端智能手機(jī)出貨數(shù)量不斷增長(zhǎng),市場(chǎng)占有率快速上揚(yáng)。</p><p> 與此同時(shí),隨著科技信息時(shí)代的到來(lái),越來(lái)越多的人認(rèn)為手機(jī)已經(jīng)不僅僅是用來(lái)打電話
27、、發(fā)短信的。他們用手機(jī)聊QQ、看電影、玩游戲、看小說(shuō)等等。因此這個(gè)市場(chǎng)的商業(yè)價(jià)值很高,所以我選擇開(kāi)發(fā)基于Android平臺(tái)的電子書管理及閱讀系統(tǒng)。該系統(tǒng)提供了強(qiáng)大的閱讀功能以及對(duì)電子書的管理,并且該軟件安全可靠、便捷清爽,從市場(chǎng)的角度來(lái)看,十分有必要進(jìn)行開(kāi)發(fā)。</p><p><b> 2.3 技術(shù)可行性</b></p><p> 我們已經(jīng)系統(tǒng)的學(xué)過(guò)JAVA技術(shù),
28、并對(duì)軟件開(kāi)發(fā)的流程有一定的了解,進(jìn)而學(xué)習(xí)了Android相關(guān)的一些技術(shù),隨著對(duì)幾種技術(shù)的掌握,從技術(shù)的角度講,該系統(tǒng)是可以實(shí)現(xiàn)的。</p><p> 本項(xiàng)目需要用到Sun公司開(kāi)發(fā)的JAVA技術(shù)以及Google公司開(kāi)發(fā)的Android技術(shù)在Eclipse環(huán)境下進(jìn)行開(kāi)發(fā)。下面對(duì)Android技術(shù)的簡(jiǎn)單介紹和必要的闡述。</p><p> 2.3.1 Android基本框架</p>
29、;<p> 圖2.3.1 Android框架圖</p><p> (1)Applications</p><p> Application Android會(huì)同一個(gè)核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短信息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是用JAVA編寫的。</p><p> (2)Appl
30、ication FrameWork</p><p> 開(kāi)發(fā)者完全可以訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來(lái)簡(jiǎn)化組建軟件的重用:任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)。該應(yīng)用程序重用機(jī)制使得組建可以被用戶替換。</p><p> 所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:</p>
31、<p> ·可擴(kuò)展的視圖(Views)可以用來(lái)建應(yīng)用程序,包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至包括一個(gè)可嵌入的web瀏覽器</p><p> ·內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)),或者共享它們自己的數(shù)據(jù)。</p><p
32、> ·資源管理器(Resource Manager)提供非代碼資源的訪問(wèn),如本地字符串,圖形,和分層文件(layout files)。</p><p> ·通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。</p><p> ·活動(dòng)類管理器(Activity Manager)用來(lái)管理應(yīng)用程序生命周期并
33、提供常用的導(dǎo)航回退功能。</p><p> (3)Libraries庫(kù)</p><p> Android包括一個(gè)被Android系統(tǒng)中各種不同組件所使用的C/C++庫(kù)集。該庫(kù)通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)。</p><p> (4)Android Runtime</p><p> Android包括了一個(gè)核心庫(kù),該核心
34、庫(kù)提供了JAVA編程語(yǔ)言核心庫(kù)的大多數(shù)功能。</p><p> 每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對(duì)于同時(shí)高效地運(yùn)行多個(gè)VMs來(lái)實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對(duì)最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA匯編器編譯,然后通過(guò)SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)
35、行。</p><p> (5)Linux內(nèi)核</p><p> Android的核心系統(tǒng)服務(wù)依賴于Linux2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層。</p><p> 2.3.2 Android系統(tǒng)的四大組件</p><p> 在Android系統(tǒng)中,為我
36、們提供了四大基本組件,每個(gè)組件是一個(gè)視圖,但是有些是可見(jiàn)的,有些是不可見(jiàn)的視圖,像Activity,ContentProvider是可見(jiàn)的視圖,Service和BroadcastReceiver是不可見(jiàn)的,它們只在系統(tǒng)的后臺(tái)運(yùn)行。下面分別介紹四大組件:</p><p> (1)Activity簡(jiǎn)介</p><p> 在Android系統(tǒng)中Activity提供可視化的用戶界面,一個(gè)And
37、roid應(yīng)用通常由多個(gè)Activity組成。多個(gè)Activity組成了Activity棧(Stack),當(dāng)前活動(dòng)的Activity處于棧頂。Activity有自己的生命周期,由Android系統(tǒng)來(lái)控制。</p><p> (2)Service簡(jiǎn)介</p><p> 顧名思義Service就是運(yùn)行在后臺(tái)的一種服務(wù)程序,一般很少和用戶交互,因此沒(méi)有可視化界面,定義一個(gè)Service類比較簡(jiǎn)
38、單,只要繼承Service類,實(shí)現(xiàn)其生命周期中的方法就可以了。一個(gè)定義好的Service必須在AndroidManifest配置文件注冊(cè),通過(guò)<service>元素聲明才能使用。Service有自己的生命周期,我們可以調(diào)用startService()啟動(dòng)一個(gè)Service或者bindService()方法來(lái)綁定一個(gè)存在的Service。</p><p> (3)Broadcast Receiver簡(jiǎn)
39、介</p><p> Broadcast Receiver顧名思義廣播接收器,它和事件處理機(jī)制類似,只不過(guò)事件處理機(jī)制是程序組件級(jí)別的(例如,某個(gè)按鈕的單擊事件),而廣播事件處理機(jī)制是系統(tǒng)級(jí)別的。到目前為止我們可以使用Intent來(lái)啟動(dòng)一個(gè)程序組件,我們還可以通過(guò)使用sendBroadcast()方法來(lái)發(fā)起一個(gè)系統(tǒng)級(jí)別的事件廣播來(lái)傳遞消息。我們可以在你的應(yīng)用程序中實(shí)現(xiàn)Broadcast Receiver來(lái)監(jiān)聽(tīng)和
40、響應(yīng)這些廣播的Intent。</p><p> (4)ContentProvider簡(jiǎn)介</p><p> ContentProvider用來(lái)保存和檢索數(shù)據(jù),并且使應(yīng)用程序之間相互訪問(wèn)數(shù)據(jù)成為可能。它是跨應(yīng)用程序共享數(shù)據(jù)的唯一方法。</p><p><b> 3 系統(tǒng)分析</b></p><p> 3.1 功能需
41、求(用例圖分析)</p><p> 3.1.1 書庫(kù)管理需求</p><p> 圖3.1.1 書庫(kù)管理圖</p><p> ·用例名稱:最近閱讀</p><p> 目標(biāo):使得用戶可以直接查看最近閱讀的書目以及這些書目的相關(guān)信息(包括書名、導(dǎo)入方式、閱讀進(jìn)度等)</p><p> ·用例名稱
42、:本地書庫(kù)</p><p> 目標(biāo):使得用戶可以直接查看已經(jīng)導(dǎo)入系統(tǒng)的書目以及這些書目的相關(guān)信息(包括書名、導(dǎo)入方式等)</p><p> ·用例名稱:電子書導(dǎo)入</p><p> 目標(biāo):使得用戶可以將SD卡中的TXT文件導(dǎo)入本地書庫(kù)</p><p> 3.1.2 閱讀的基本功能需求</p><p>
43、 圖3.1.2 閱讀的基本功能圖</p><p> ·用例名稱:字體調(diào)節(jié)</p><p> 目標(biāo):使得用戶可以根據(jù)自己的需求調(diào)節(jié)字體大小,同時(shí)系統(tǒng)將動(dòng)態(tài)分配頁(yè)數(shù)與每頁(yè)所容納的字符個(gè)數(shù)</p><p> ·用例名稱:亮度調(diào)節(jié)/亮度模式</p><p> 目標(biāo):使得用戶可以根據(jù)自己的需求調(diào)節(jié)屏幕亮度及是否開(kāi)啟夜間模式
44、</p><p><b> ·用例名稱:書簽</b></p><p> 目標(biāo):支持用戶添加、刪除書簽及跳轉(zhuǎn)到書簽位置</p><p> ·用例名稱:頁(yè)面跳轉(zhuǎn)</p><p> 目標(biāo):支持用戶可以任意跳轉(zhuǎn)到任意頁(yè)數(shù)</p><p> ·用例名稱:翻頁(yè)模式/翻頁(yè)
45、</p><p> 目標(biāo):支持用戶可以在橫屏閱讀和豎屏閱讀間進(jìn)行切換及閱讀電子書</p><p> 3.1.3 SD卡內(nèi)電子書清單管理需求</p><p> 圖3.1.2 SD卡導(dǎo)入圖</p><p> ·用例名稱:導(dǎo)入本地書目</p><p> 目標(biāo):將所有SD卡內(nèi)包含TXT文件的父文件夾全部列出
46、</p><p> 3.2 系統(tǒng)流程圖和結(jié)構(gòu)圖</p><p> ?。?)電子書管理及閱讀系統(tǒng)流程圖(圖3.2.1)</p><p> 圖3.2.1 系統(tǒng)流程圖</p><p> (2)電子書管理及閱讀系統(tǒng)結(jié)構(gòu)圖(圖3.2.2)</p><p> 圖3.2.2 系統(tǒng)結(jié)構(gòu)圖</p><p>
47、; ?。?)電子書管理及閱讀系統(tǒng)功能表(表3.2.3)</p><p> 表3.2.3 功能表</p><p> 3.3 系統(tǒng)界面需求</p><p> 該系統(tǒng)要求界面簡(jiǎn)潔,UI組件友好,操作方便。</p><p> 為達(dá)到理想效果,該項(xiàng)目所有圖片素材全部由本人通過(guò)PhotoShop進(jìn)行處理所得。</p><p&g
48、t; 3.4 系統(tǒng)性能需求</p><p> 根據(jù)Android手機(jī)系統(tǒng)超過(guò)五秒視為無(wú)響應(yīng)特性制定如下要求:</p><p> (1)載入大文件時(shí),系統(tǒng)響應(yīng)時(shí)間最長(zhǎng)不能超過(guò)5秒(理論上0秒載入)</p><p> (2)掃描SD卡時(shí),系統(tǒng)響應(yīng)時(shí)間最長(zhǎng)不能超過(guò)5秒</p><p> ?。?)翻頁(yè)時(shí),系統(tǒng)響應(yīng)時(shí)間最長(zhǎng)不能超過(guò)5秒</
49、p><p><b> ?。?)提高系統(tǒng)性能</b></p><p> 3.5 運(yùn)行環(huán)境需求</p><p> 操作系統(tǒng):Android手機(jī)基于Linux操作系統(tǒng)</p><p> 支持環(huán)境:Android 2.1版本及以上</p><p> 開(kāi)發(fā)環(huán)境:Eclipse</p>&l
50、t;p><b> 4 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 4.1 Android SQLite概述</p><p> SQLite第一個(gè)Alpha版本誕生于2000年5月,它是一款輕型數(shù)據(jù)庫(kù),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用,它占用的資源非常少,在嵌入式設(shè)備中,可能只需要幾百KB內(nèi)存就夠了。也許這正是Android系統(tǒng)要采用SQ
51、Lite數(shù)據(jù)庫(kù)的原因之一吧。</p><p> SQLite支持SQL語(yǔ)言,它是開(kāi)源的,任何人都可以使用它,許多開(kāi)源項(xiàng)目(Mozilla,PHP,Python)都使用了SQLite。</p><p> SQLite由以下幾個(gè)組件組成:SQL編譯器、內(nèi)核、后端以及附件,SQLite通過(guò)利用虛擬機(jī)和虛擬數(shù)據(jù)庫(kù)引擎(VDBE),使調(diào)試、修改和擴(kuò)展SQLite的內(nèi)核變得更加方便。</p&
52、gt;<p> 本系統(tǒng)大量使用對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查等操作。</p><p> 4.2 Android SQLite特征及內(nèi)部結(jié)構(gòu)</p><p> ?。?)SQLite特征</p><p> SQLite數(shù)據(jù)庫(kù)是D.Richard Hipp用C語(yǔ)言編寫的開(kāi)源嵌入式數(shù)據(jù)庫(kù),支持的數(shù)據(jù)庫(kù)大小為2TB。它具有如下特征:</p><
53、;p> 輕量級(jí):SQLite和C/S模式的數(shù)據(jù)庫(kù)軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)引擎,因此不存在數(shù)據(jù)庫(kù)的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個(gè)動(dòng)態(tài)庫(kù),就可以享受它的全部功能。而且那個(gè)動(dòng)態(tài)庫(kù)的尺寸也相當(dāng)小。</p><p> 獨(dú)立性:SQLite數(shù)據(jù)庫(kù)的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”所以在部署的時(shí)候能省去不少麻煩。</p><p> 隔離性:SQL
54、ite數(shù)據(jù)庫(kù)中所有的信息(比如表、視圖、觸發(fā)器)都包含在一個(gè)文件內(nèi),方便管理和維護(hù)。</p><p> 跨平臺(tái):SQLite數(shù)據(jù)庫(kù)支持大部分操作系統(tǒng),除了我們?cè)陔娔X上使用的操作系統(tǒng)外,很多手機(jī)系統(tǒng)同樣可以運(yùn)行,比如Android、Windows Mobile、Sysbin、Palm等。</p><p> 多語(yǔ)言接口:SQLite數(shù)據(jù)庫(kù)支持很多語(yǔ)言接口,比如C/C++、java、Pyth
55、on、dotNet、Ruby、Perl等,得到很多開(kāi)發(fā)者的喜愛(ài)。</p><p> 安全性:SQLite數(shù)據(jù)庫(kù)通過(guò)數(shù)據(jù)庫(kù)級(jí)上的獨(dú)占性和共享鎖來(lái)實(shí)現(xiàn)獨(dú)立事務(wù)處理。這意味著多個(gè)進(jìn)程在同一時(shí)間從同一數(shù)據(jù)庫(kù)讀取數(shù)據(jù),但只有一個(gè)可以寫入數(shù)據(jù)。在某個(gè)進(jìn)程或線程向數(shù)據(jù)庫(kù)執(zhí)行寫操作前,必須獲得獨(dú)占鎖定。在發(fā)出獨(dú)占鎖定后,其他的讀或?qū)懖僮鲗⒉粫?huì)再發(fā)生。</p><p> (2)SQLite內(nèi)部結(jié)構(gòu)<
56、;/p><p> SQLite基本上符合SQL-92標(biāo)準(zhǔn),和其他的主要SQL數(shù)據(jù)庫(kù)沒(méi)什么區(qū)別,它的優(yōu)點(diǎn)就是高效,Android運(yùn)行時(shí)環(huán)境包含了完整的SQLite。</p><p> SQLite和其他數(shù)據(jù)庫(kù)最大的不同就是對(duì)數(shù)據(jù)類型的支持,創(chuàng)建一個(gè)表時(shí),可以在CREATE TABLE語(yǔ)句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中,當(dāng)某個(gè)值插入數(shù)據(jù)庫(kù)時(shí),SQLite將檢查它的類
57、型,如果該類型與關(guān)聯(lián)的列不匹配,則SQLite會(huì)嘗試將該值轉(zhuǎn)換成該列的類型,如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲(chǔ),比如可以把一個(gè)字符串(String)放入INTEGER列,SQLite稱這為“弱類型”(mainfest typing)。此外,SQLite不支持一些標(biāo)準(zhǔn)的SQL功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套transcaction和RIGHT OUTER JOIN 和FULL OUTE
58、R JOIN,還有一些ALTER TABLE功能。</p><p> 圖4.2.2 SQLite內(nèi)部結(jié)構(gòu)</p><p> 除了上述功能外,SQLite是一個(gè)完整的SQL系統(tǒng),擁有完整的觸發(fā)器,交易等等。</p><p> 4.3 數(shù)據(jù)庫(kù)概念模型</p><p> (1)電子書信息E-R(實(shí)體-聯(lián)系:entity-relation圖)
59、圖(圖4.3.1)</p><p> 圖4.3.1 SQLite內(nèi)部結(jié)構(gòu)</p><p> (2)書簽信息E-R圖(圖4.3.2)</p><p> 圖4.3.2 SQLite內(nèi)部結(jié)構(gòu)</p><p> (3)電子書與書簽關(guān)系(圖4.3.3)</p><p> 1
60、 n </p><p> 圖4.3.3 電子書與書簽關(guān)系</p><p> 4.4 數(shù)據(jù)庫(kù)字段設(shè)計(jì)</p><p> 4.4.1 電子書信息表</p><p> 文件導(dǎo)入狀態(tài)表主要用于記錄文件的導(dǎo)入狀態(tài)信息,表名為localbook,其中包含4個(gè)字段:parent字段記錄文件的父文件夾
61、地址,用于顯示導(dǎo)入書目時(shí)顯示。path字段記錄文件的地址。type字段記錄文件是否已經(jīng)導(dǎo)入本地書庫(kù),0為未導(dǎo)入,1為已導(dǎo)入。now字段記錄文件是否導(dǎo)入最近閱讀書庫(kù),0為未導(dǎo)入,1為已導(dǎo)入。</p><p> 表4.4.1 電子書信息表</p><p> 4.4.2 書簽信息表</p><p> 書簽信息表主要用于記錄書簽的相關(guān)信息,表名為markhelper,
62、其中包含4個(gè)字段:path字段記錄電子書的地址。page字段記錄當(dāng)前書簽所處頁(yè)數(shù)。word字段記錄當(dāng)前頁(yè)數(shù)的前10個(gè)字符。time字段用于記錄當(dāng)前時(shí)間,精確到毫秒,用于區(qū)分同一本書的不同書簽。</p><p> 表4.4.2 書簽信息表</p><p> 5 系統(tǒng)功能詳細(xì)設(shè)計(jì)</p><p> 5.1 系統(tǒng)主界面功能實(shí)現(xiàn)</p><p>
63、; 5.1.1 系統(tǒng)主界面</p><p> (1)功能說(shuō)明:展示最近閱讀書目</p><p> (2)運(yùn)行界面:如圖5.1.1所示</p><p> 圖5.1.1 最近閱讀</p><p> Android的每一個(gè)可視化界面,都有一個(gè)唯一的布局配置文件,該文件里面有各種布局方式,和各種資源文件如圖像,文字,顏色的引用,程序在運(yùn)行時(shí)
64、可以通過(guò)代碼對(duì)各配置文件進(jìn)行讀取。這樣就可以形成不同的可視化界面和絢麗的效果。</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p><b> <1>界面的實(shí)現(xiàn)</b></p><p> 圖5.1.1為進(jìn)入系統(tǒng)時(shí)首個(gè)界面“最近閱讀”,主界面布局文件名為main.xml,該界面通過(guò)在線性布局&
65、lt;LinearLayout>下嵌套兩個(gè)相對(duì)布局<RelativeLayout >,從而實(shí)現(xiàn)效果,第一個(gè)相對(duì)布局<RelativeLayout >用于實(shí)現(xiàn)上方所在書庫(kù)的提示欄。第二個(gè)相對(duì)布局<RelativeLayout >下嵌套<ListView>和網(wǎng)格組件<GridView>,分別用于實(shí)現(xiàn)電子書相關(guān)信息的羅列以及下方工具欄的顯示。同時(shí)在載入布局之前調(diào)用request
66、WindowFeature(Window.FEATURE_NO_TITLE)去除標(biāo)題,為提高美觀性本系統(tǒng)所有界面均采用無(wú)標(biāo)題模式。</p><p><b> <2>書目的載入</b></p><p> ListView為Android內(nèi)的一個(gè)視圖,本界面采用適配器SimpleAdapter對(duì)ListView進(jìn)行加載,遍歷數(shù)據(jù)庫(kù)localbook,將數(shù)據(jù)
67、庫(kù)內(nèi)標(biāo)識(shí)為最近閱讀的書目信息放入map中,再將map添加到ArrayList內(nèi),調(diào)用適配器實(shí)現(xiàn)對(duì)ArrayList集合內(nèi)數(shù)據(jù)遍歷并加載到用于顯示的布局item.xml。</p><p><b> <3>點(diǎn)擊事件</b></p><p> 通過(guò)調(diào)用setOnItemClickListener實(shí)現(xiàn)對(duì)ListView的點(diǎn)擊監(jiān)聽(tīng)。當(dāng)用戶點(diǎn)擊書目時(shí),采用Inte
68、nt將該書目的地址存入并跳轉(zhuǎn)到下一個(gè)Activity顯示界面。</p><p><b> 5.1.2 工具欄</b></p><p> (1)功能說(shuō)明:最近閱讀與本地書庫(kù)的切換</p><p> (2)運(yùn)行界面:如圖5.1.2所示</p><p> 圖5.1.2.工具欄</p><p>&
69、lt;b> (3)實(shí)現(xiàn)方法:</b></p><p> 下方工具欄通過(guò)GridView實(shí)現(xiàn),用法基本于ListView相同,調(diào)用適配器SimpleAdapter載入布局item_menu.xml,設(shè)置列數(shù)為3。同樣通過(guò)調(diào)用setOnItemClickListener實(shí)現(xiàn)對(duì)點(diǎn)擊監(jiān)聽(tīng)。當(dāng)用戶點(diǎn)擊“本地書庫(kù)”時(shí),進(jìn)行文字和圖片的切換,同時(shí)重新遍歷數(shù)據(jù)庫(kù)localbook,將數(shù)據(jù)庫(kù)內(nèi)標(biāo)識(shí)為已導(dǎo)入的書
70、目信息進(jìn)行存儲(chǔ),并載入到ListView中,從而實(shí)現(xiàn)“最近閱讀”與“本地書庫(kù)”之間的切換。</p><p> 5.1.3 OptionsMenu</p><p> (1)功能說(shuō)明:當(dāng)點(diǎn)擊手機(jī)MENU鍵時(shí)彈出OptionsMenu菜單</p><p> (2)運(yùn)行界面:如圖5.1.3所示</p><p> 圖5.1.3 OptionsM
71、enu</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 重寫onCreateOptionsMenu方法,載入menu.xml布局文件,實(shí)現(xiàn)點(diǎn)擊手機(jī)MENU按鍵時(shí)彈出此選項(xiàng)框。需要在res目錄下創(chuàng)建menu文件夾,將menu.xml放入該文件夾內(nèi)。重寫onOptionsItemSelected方法,實(shí)現(xiàn)對(duì)該menu的點(diǎn)擊監(jiān)聽(tīng),通過(guò)布局文件中的I
72、D進(jìn)行判斷點(diǎn)擊的是哪個(gè),然后進(jìn)行相關(guān)處理。</p><p> 5.2 手機(jī)擴(kuò)展卡訪問(wèn)</p><p> 5.2.1本地書目的顯示</p><p> (1)功能說(shuō)明:在導(dǎo)入本地書目界面內(nèi)列出所有包含電子書的文件夾</p><p> (2)運(yùn)行界面:如圖5.2.1所示</p><p> 圖5.2.1 導(dǎo)入本地書目
73、</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 當(dāng)點(diǎn)擊OptionsMenu中的“導(dǎo)入本地書目”時(shí),通過(guò)Intent跳轉(zhuǎn)到該頁(yè)面,首先查詢數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)為空則表示第一次進(jìn)入該界面,則進(jìn)行對(duì)SD卡的遍歷,通過(guò)file.listFiles()方法,采用遞歸模式,記錄所有包含電子書的父文件夾地址及電子書地址,通過(guò)ListView進(jìn)行羅列,同時(shí)
74、寫入數(shù)據(jù)庫(kù)localbook。由于遍歷SD時(shí)采用遞歸模式,如果文件較多會(huì)影響系統(tǒng)效率,為提高友好度,故開(kāi)啟線程進(jìn)InThread行遍歷,同時(shí)調(diào)用自定義Dialog進(jìn)行提示,該Dialog實(shí)現(xiàn)去標(biāo)題,加入TextView和ProgressBar實(shí)現(xiàn)如圖效果,當(dāng)遍歷結(jié)束后由InThread向主線程發(fā)送消息,通過(guò)Handler接收,同時(shí)調(diào)用Dialog的dismiss()方法,使其消失。</p><p> 如果查詢時(shí)
75、,數(shù)據(jù)庫(kù)localbook內(nèi)有數(shù)據(jù),則不進(jìn)行SD卡遍歷直接將數(shù)據(jù)庫(kù)內(nèi)信息導(dǎo)入集合內(nèi),通過(guò)讀取進(jìn)行顯示。這樣大大提高了系統(tǒng)效率,節(jié)省了不必要的資源。</p><p> 5.2.2 刷新本地書目</p><p> (1)功能說(shuō)明:手動(dòng)刷新本地書目</p><p> (2)運(yùn)行界面:如圖5.2.2所示</p><p> 圖5.2.2 刷新本
76、地書目</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 當(dāng)數(shù)據(jù)庫(kù)localbook內(nèi)有數(shù)據(jù)時(shí),不進(jìn)行SD卡遍歷,用戶可根據(jù)需要進(jìn)行手動(dòng)刷新。刷新的實(shí)現(xiàn)為開(kāi)啟線程,遍歷SD卡電子書信息,同時(shí)取出localbook內(nèi)電子書信息進(jìn)行對(duì)比,得出電子書的更改信息。并進(jìn)行對(duì)數(shù)據(jù)庫(kù)電子書相關(guān)信息的修改。最后載入數(shù)據(jù)庫(kù)更改后的電子書信息。</p>
77、<p> 5.2.3 本地書目的導(dǎo)入</p><p> (1)功能說(shuō)明:將SD卡內(nèi)書目導(dǎo)入本地書庫(kù)</p><p> (2)運(yùn)行界面:如圖5.2.3、5.2.4所示</p><p> 圖5.2.3導(dǎo)入本地?cái)?shù)目</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p&g
78、t; <1>界面實(shí)現(xiàn)與全選</p><p> 如圖5.2.3 當(dāng)點(diǎn)擊某一個(gè)ListView中的文件夾時(shí),通過(guò)數(shù)據(jù)庫(kù)查詢到該父文件夾包含的所有電子書信息,切換布局同時(shí)將電子書信息羅列出來(lái)。</p><p> 如圖5.2.4 進(jìn)入子此界面后會(huì)添加一個(gè)全選的文字按鈕,將電子書信息存儲(chǔ)到一個(gè)集合中,進(jìn)行邏輯判斷,點(diǎn)擊后全選文字按鈕會(huì)切換成反選按鈕。</p><
79、p> <2>書目導(dǎo)入過(guò)程及顯示</p><p> 該界面與圖5.2.2界面同用一個(gè)點(diǎn)擊監(jiān)聽(tīng)事件,通過(guò)邏輯判斷,如果是點(diǎn)擊的是一個(gè)文件夾,則遍歷該文件夾包含的電子書,如果點(diǎn)擊的不是文件夾則將點(diǎn)擊的電子書的相關(guān)信息記錄到集合中,同時(shí)彈出popupwindow,顯示該集合的長(zhǎng)度。</p><p> 圖5.2.4 popupwindow
80、</p><p> Popupwindow經(jīng)常于dialog混用,popupwindow用于將一個(gè)布局懸浮在另一個(gè)布局的上方,通過(guò)獲取該布局內(nèi)部按鈕ID,調(diào)用onClickListener獲取點(diǎn)擊事件。當(dāng)點(diǎn)擊導(dǎo)入后,用popupwindow.dismiss()使其消失,同時(shí)從新加載ListView的適配器,同時(shí)更新數(shù)據(jù)庫(kù),試導(dǎo)入書目狀態(tài)更改為已導(dǎo)入。</p><p> 返回上一級(jí)是通過(guò)
81、將適配器的數(shù)據(jù)源ArrayList內(nèi)下標(biāo)為0的位置添加“返回上一級(jí)”信息,ArrayList的map內(nèi)并添加標(biāo)志位,獲取點(diǎn)擊事件時(shí),如果判斷點(diǎn)擊的為L(zhǎng)istView的第0個(gè)位置,并且該位置不是文件夾時(shí),則加載所有父文件夾信息,從而實(shí)現(xiàn)返回上一級(jí)功能。</p><p><b> (4)流程圖:</b></p><p><b> N</b><
82、;/p><p><b> Y </b></p><p> 圖5.2.5導(dǎo)入本地?cái)?shù)目流程圖</p><p> 5.3 文章載入及翻頁(yè)實(shí)現(xiàn)</p><p> 5.3.1 文章載入</p><p> (1)功能說(shuō)明:點(diǎn)擊書目后載入文章</p><p> (2)運(yùn)行
83、界面:如圖5.3.1所示</p><p> 圖5.3.1 文章載入</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.3.1當(dāng)點(diǎn)擊本地書庫(kù)或最近閱讀內(nèi)書目后,通過(guò)Intent將書目地址載入并跳轉(zhuǎn),getWindow().addFlags(WindowManager.LayoutParams.FlAG_FULLS
84、CREEN)實(shí)現(xiàn)全屏模式。同時(shí)更新數(shù)據(jù)庫(kù),將該書目的狀態(tài)更改為最近閱讀。載入的實(shí)現(xiàn)具體如下:</p><p><b> <1>跳轉(zhuǎn)及編碼</b></p><p> 獲取Intent傳來(lái)的地址,對(duì)文件進(jìn)行讀取,首先讀取文件的前三個(gè)字節(jié),目的是獲取該文件的編碼方式。</p><p><b> <2>計(jì)算書目頁(yè)
85、數(shù)</b></p><p> 根據(jù)字體的大小動(dòng)態(tài)分配每頁(yè)的字符數(shù),將InputStreamReader套一層BufferedReader,通過(guò)調(diào)用read(char[],0,size)方法讀入字符,當(dāng)返回值為-1時(shí)讀到結(jié)尾,否則頁(yè)數(shù)加1,這樣就可以用計(jì)算出本書的頁(yè)數(shù)。</p><p> <3>獲取指定頁(yè)數(shù)的內(nèi)容</p><p> 傳入要
86、載入的頁(yè)數(shù),同樣用InputStreamReader套一層BufferedReader并進(jìn)行編碼轉(zhuǎn)換,再通過(guò)skip(size*(page-1))跳過(guò)該頁(yè)數(shù)之前的所有字符,然后通過(guò)read(char[],0,size)讀出該頁(yè)數(shù)的字符,然后存儲(chǔ)到StringBuffer內(nèi)。</p><p> <4>顯示指定頁(yè)數(shù)的內(nèi)容</p><p> 布局文件內(nèi)添加ViewFlipper組
87、件,將得到的StringBuffer寫入TextView中,再將TextView添加到ViewFlipper內(nèi),從而達(dá)到效果。ViewFlipper相當(dāng)于一個(gè)容器,可以將視圖放入然后通過(guò)showNext()等方法對(duì)視圖進(jìn)行切換。</p><p> <5>使一頁(yè)顯示不下的內(nèi)容通過(guò)滾動(dòng)閱讀</p><p> ViewFlipper為水平滑動(dòng)容器,當(dāng)屏幕的空間無(wú)法完全顯示設(shè)置一頁(yè)
88、的字符數(shù)時(shí),采用滾動(dòng)作為垂直滑動(dòng)容器,自定義一個(gè)FriendlyScrollView類,來(lái)重寫ScrollView的onTouchEvent和dispatchTouchEvent方法。在布局文件中添加FriendlyScrollView組件。從而實(shí)現(xiàn)垂直滾動(dòng)。</p><p> 5.3.2 手勢(shì)識(shí)別</p><p> (1)功能說(shuō)明:翻頁(yè)效果的實(shí)現(xiàn)</p><p&g
89、t; (2)運(yùn)行界面:如圖5.3.2所示</p><p> 圖5.3.2 屏幕點(diǎn)擊</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> <1>滑動(dòng)屏幕事件及ViewFlipper翻頁(yè)</p><p> 實(shí)現(xiàn)OnGestureListener接口,并實(shí)現(xiàn)全部的方法。通過(guò)new Ges
90、tureDetector(this)添加監(jiān)聽(tīng),實(shí)現(xiàn)的onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)方法中,e1、e2分別為第一下點(diǎn)擊屏幕和離開(kāi)屏幕的事件,可通過(guò)e1.getX()獲取第一次點(diǎn)擊屏幕時(shí)的橫坐標(biāo),e2.getX()獲取手指離開(kāi)屏幕時(shí)的橫坐標(biāo),通過(guò)判斷當(dāng)e1.getX() – e2.getX() > 120時(shí)即手指在屏幕右
91、邊滑到左邊時(shí),判定為向后翻頁(yè),當(dāng)e1.getX() – e2.getX() < -120時(shí)即手指在屏幕左邊滑到右邊時(shí),判定為向前翻頁(yè)。</p><p> 由于ViewFlipper中的切換是循環(huán)形式的,所以當(dāng)向后翻頁(yè)或向后時(shí),調(diào)用文件讀取方法將下一頁(yè)或上一頁(yè)的字符全部讀入到StringBuffer,并載入到ViewFlipper,此時(shí)調(diào)用ViewFlipper.showNext(),同時(shí)調(diào)用flipper
92、.removeViewAt(0)將ViewFlipper中0位置的視圖刪除,這樣就可以保證ViewFlipper中只有一個(gè)視圖存在,并且只讀取一頁(yè)的字符,從而實(shí)現(xiàn)動(dòng)態(tài)載入的目的,這樣大大提升了系統(tǒng)性能,從而理論上實(shí)現(xiàn)無(wú)限大電子書的載入。</p><p> 在res下添加anim文件夾,放入翻頁(yè)動(dòng)畫xml布局,在flipper.showNext()之前調(diào)用fllipper.setInAnimation實(shí)現(xiàn)翻頁(yè)的動(dòng)
93、畫效果。</p><p><b> <2>屏幕點(diǎn)擊事件</b></p><p> 實(shí)現(xiàn)的onSingleTapUp(MotionEvent e)方法中,e為點(diǎn)擊屏幕事件,通過(guò)e.getY()獲取點(diǎn)擊屏幕的縱坐標(biāo),同時(shí)獲取屏幕高度進(jìn)行判斷,如果點(diǎn)擊坐標(biāo)為屏幕上1/3部分則調(diào)用先前翻頁(yè)方法,如果點(diǎn)擊坐標(biāo)為屏幕下1/3部分則調(diào)用向后翻頁(yè)方法,如圖5.3.2
94、如果點(diǎn)擊其它部分即屏幕中間部分,則通過(guò)popupwindow彈出下方閱讀設(shè)置菜單,并退出全屏模式。再點(diǎn)一下該部分popupwindow消失,切換會(huì)全屏模式。</p><p> 5.4 閱讀設(shè)置功能實(shí)現(xiàn)</p><p> 閱讀設(shè)置菜單內(nèi)所有控件均放入popupwindow進(jìn)行彈出,從而提高界面友好度及美觀性。</p><p> 5.4.1 字體設(shè)置</p&
95、gt;<p> (1)功能說(shuō)明:調(diào)整文字大小</p><p> (2)運(yùn)行界面:如圖5.4.1所示</p><p> 圖5.4.1 字體設(shè)置</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.4.1 在xml文件中放入SeekBar組件,在布局文件中設(shè)定SeekBar的
96、最大值為20,同時(shí)通過(guò)onProgressChanged實(shí)現(xiàn)對(duì)SeekBar事件的監(jiān)聽(tīng),通過(guò)seekbar.getProgress()可以取出當(dāng)前SeekBar的值,根據(jù)該值從新設(shè)置每頁(yè)的字符數(shù),同時(shí)從新計(jì)算該書的頁(yè)數(shù),計(jì)算完成后,再次載入該頁(yè)數(shù)的內(nèi)容到TextView中,并設(shè)置字體的大小,完成后將TextView載入到flipper中,并移除flipper的0位置的視圖,從而達(dá)到字體改變的效果。</p><p>
97、; 5.4.2 亮度設(shè)置</p><p> (1)功能說(shuō)明:調(diào)整屏幕亮度及夜間模式</p><p> (2)運(yùn)行界面:如圖5.4.2所示</p><p> 圖5.4.2 亮度設(shè)置</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.4.2 同樣采用SeekBa
98、r組件,對(duì)SeekBar進(jìn)行實(shí)時(shí)監(jiān)聽(tīng)。獲取出SeekBar值,通過(guò)getWindow().setAttributes(WindowManager.LayoutParams.screenBrightness)進(jìn)行設(shè)置屏幕的亮度。</p><p> 夜間模式為一個(gè)ImageButton,通過(guò)onClick進(jìn)行監(jiān)聽(tīng),點(diǎn)擊后通過(guò)setImageResource切換按鈕的圖片,同時(shí)修改TextView的背景及字體顏色,同
99、時(shí)重新載入TextView,從而實(shí)現(xiàn)夜間模式。</p><p><b> 5.4.3 書簽</b></p><p> (1)功能說(shuō)明:書簽的添加、跳轉(zhuǎn)、刪除</p><p> (2)運(yùn)行界面:如圖5.4.3所示</p><p> 圖5.4.3 我的書簽</p><p><b>
100、 (3)實(shí)現(xiàn)方法:</b></p><p><b> <1>書簽的添加</b></p><p> 如圖5.4.3 popupwindow內(nèi)放入兩個(gè)ImageButton,點(diǎn)擊添加書簽,則將當(dāng)前頁(yè)數(shù)、當(dāng)前時(shí)間(精確到毫秒,用于區(qū)分各個(gè)書簽)、當(dāng)前頁(yè)數(shù)的前10個(gè)字符添加入數(shù)據(jù)庫(kù)markhelper,同時(shí)使popupwindow消失并彈出一個(gè)To
101、ast,提示用戶添加成功。Toast為系統(tǒng)對(duì)話框,該對(duì)話框幾秒后會(huì)自動(dòng)消失。</p><p><b> <2>書簽的跳轉(zhuǎn)</b></p><p> 創(chuàng)建一個(gè)自定義Dialog,內(nèi)部嵌套ListView,用于羅列書簽信息,由于SimpleAdapter為系統(tǒng)適配器,無(wú)法添加ListView內(nèi)部事件的監(jiān)聽(tīng),所以采用自定義Adapter,繼承BaseAdap
102、ter,重寫其中的getView方法,在該方法內(nèi)實(shí)現(xiàn)對(duì)點(diǎn)擊事件的監(jiān)聽(tīng)。</p><p> 當(dāng)點(diǎn)擊我的書簽時(shí),遍歷數(shù)據(jù)庫(kù)markhelper,如果數(shù)據(jù)庫(kù)為空,則彈出Toast,提示用戶“您還沒(méi)有書簽”,否則將數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)遍歷出來(lái),放入集合中并加載ListView的自定義適配器。</p><p> 重寫MarkDialog的構(gòu)造方法,當(dāng)調(diào)用時(shí)將Read類中的Handler傳入,用于接受界面
103、跳轉(zhuǎn)信息,時(shí)候當(dāng)點(diǎn)擊某個(gè)書簽時(shí),onItemClickListener獲取是哪個(gè)書簽,取出頁(yè)數(shù)數(shù)據(jù),開(kāi)啟線程,在Read類通過(guò)Handler接收,當(dāng)接受信息時(shí),調(diào)用MarkDialog內(nèi)的靜態(tài)方法getA()來(lái)獲取當(dāng)前點(diǎn)擊書簽所在的頁(yè)數(shù),并進(jìn)行flipper動(dòng)態(tài)載入,從而實(shí)現(xiàn)跳轉(zhuǎn)到該書簽的位置。</p><p><b> <3>書簽的刪除</b></p><
104、p> 由于采用自定義適配器,可以監(jiān)聽(tīng)到ListView內(nèi)部嵌套的點(diǎn)擊時(shí)間,故當(dāng)添加用于刪除書簽的ImageButton,如圖5.4.3 當(dāng)點(diǎn)擊小垃圾桶圖標(biāo)時(shí),獲取出該書簽的時(shí)間信息,在數(shù)據(jù)庫(kù)中刪除此行信息,同時(shí)從新加載ListView。當(dāng)數(shù)據(jù)庫(kù)為空時(shí),使MarkDialog消失。</p><p><b> (4)流程圖:</b></p><p> 圖5.4
105、.3(4) 書簽流程圖</p><p><b> 5.4.4 跳轉(zhuǎn)</b></p><p> (1)功能說(shuō)明:跳轉(zhuǎn)到指定頁(yè)數(shù)</p><p> (2)運(yùn)行界面:如圖5.4.4所示</p><p><b> 圖5.4.4 跳轉(zhuǎn)</b></p><p><b>
106、 (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.4.4 同樣采用SeekBar組件,根據(jù)書的總頁(yè)數(shù)動(dòng)態(tài)設(shè)置Seek的最大值,實(shí)時(shí)獲取SeekBar的值,調(diào)用頁(yè)面跳轉(zhuǎn)的方法即重新載入flipper實(shí)現(xiàn)跳轉(zhuǎn)到指定頁(yè)數(shù)功能。跳轉(zhuǎn)之前記錄當(dāng)前頁(yè)數(shù),如果用戶點(diǎn)擊取消,則跳回跳轉(zhuǎn)之前記錄的頁(yè)數(shù)。</p><p> 5.4.5 橫、豎屏翻頁(yè)切換</p><p&
107、gt; (1)功能說(shuō)明:橫屏翻頁(yè)與豎屏翻頁(yè)之間額切換</p><p> (2)運(yùn)行界面:如圖5.4.5所示</p><p> 圖5.4.5橫、豎屏翻頁(yè)切換</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.4.5 同樣采用ImageButton組件,默認(rèn)為橫屏翻頁(yè)即橫向滑動(dòng)翻頁(yè),點(diǎn)擊
108、按鈕后,切換模式,將整個(gè)文件全部載入到flipper,實(shí)現(xiàn)上下滾動(dòng)翻頁(yè),但內(nèi)容過(guò)多時(shí),內(nèi)存將溢出,故判斷如果內(nèi)容超過(guò)10萬(wàn)字符時(shí),截取前10萬(wàn)字符顯示,并通過(guò)Toast提示用戶“文件過(guò)長(zhǎng),建議切換橫屏閱讀”。</p><p> 5.5 其它功能點(diǎn)實(shí)現(xiàn)</p><p> 5.5.1 回退鍵的重寫</p><p> (1)功能說(shuō)明:當(dāng)按手機(jī)回退鍵時(shí)頁(yè)面的跳轉(zhuǎn) &l
109、t;/p><p><b> (2)實(shí)現(xiàn)方法:</b></p><p> 在閱讀界面、導(dǎo)入本地書目界面均通過(guò)onKeyDown重寫了手機(jī)的回退鍵按鈕,在閱讀界面\導(dǎo)入本地書目界面重寫回退鍵,通過(guò)Intent傳標(biāo)志到MainActivity,在MainActivity中通過(guò)getIntent獲取標(biāo)志,并通過(guò)標(biāo)志載入最近閱讀界面\本地書目界面。從而實(shí)時(shí)更新本地書庫(kù)及最近閱讀
110、。</p><p> 5.5.2 快捷方式及書目刪除</p><p> (1)功能說(shuō)明:將書目添加到桌面快捷方式及刪除書目</p><p> (2)運(yùn)行界面:如圖5.5.2所示</p><p> 圖5.5.2ContextMenu及快捷方式</p><p><b> (3)實(shí)現(xiàn)方法:</b&g
111、t;</p><p><b> <1>書目的刪除</b></p><p> 如圖5.5.2 通過(guò)onCreateContextMenu創(chuàng)建上下文菜單,并通過(guò)給ListView添加長(zhǎng)按點(diǎn)擊事件,當(dāng)用戶長(zhǎng)按某一個(gè)電子書時(shí),在界面上方就會(huì)彈出該對(duì)話框。通過(guò)onContextItemSelected監(jiān)聽(tīng)點(diǎn)擊的是Menu中的哪個(gè)選項(xiàng)。</p>&l
112、t;p> 當(dāng)點(diǎn)擊“從閱讀列表中刪除”,獲取當(dāng)前書目的地址,清空與該書有關(guān)的所有信息記錄,并重新載入ListView。</p><p><b> <2>添加快捷方式</b></p><p> 在Mainfest中加入添加快捷方式權(quán)限,當(dāng)點(diǎn)擊“創(chuàng)建快捷方式”,添加Intent,將圖標(biāo)、標(biāo)題、地址、標(biāo)志等信息傳入,創(chuàng)建快捷方式并發(fā)送廣播。在MainA
113、ctivity中進(jìn)行獲取Intent標(biāo)志信息,如果判斷為在快捷方式進(jìn)入,則獲取書目地址,進(jìn)行跳轉(zhuǎn)到該書目。</p><p> 5.5.3 SharedPreferences</p><p> (1)功能說(shuō)明:書目各種狀態(tài)的記錄</p><p> (2)運(yùn)行界面:如圖5.5.4所示</p><p> 圖5.5.4SharedPrefer
114、ences</p><p><b> (3)實(shí)現(xiàn)方法:</b></p><p> 如圖5.5.3 閱讀進(jìn)度是通過(guò)SharedPreferences記錄。SharedPreferences提供了一種輕量級(jí)的數(shù)據(jù)存儲(chǔ)方法,它是以“鍵-值”對(duì)的方式進(jìn)行存儲(chǔ)。本系統(tǒng)大量使用SharedPreferences,包括記錄閱讀設(shè)置的字體、亮度、亮度模式、翻頁(yè)模式、閱讀進(jìn)度。當(dāng)下
115、次進(jìn)入閱讀界面時(shí),均會(huì)讀取SharedPreferences內(nèi)存儲(chǔ)的相關(guān)信息進(jìn)行設(shè)置。</p><p><b> 6 系統(tǒng)測(cè)試</b></p><p><b> 6.1 測(cè)試環(huán)境</b></p><p> 手機(jī)平臺(tái):HTC Incredible S(G11)</p><p> 手機(jī)系統(tǒng):An
116、droid 2.2</p><p> CPU頻率:1024MHz</p><p> 機(jī)身內(nèi)存:1124MB ROM+786MB RAM</p><p><b> 儲(chǔ)存卡:2G</b></p><p> 6.2 超大文件載入</p><p> 將一個(gè)50M的文本導(dǎo)入本地書庫(kù)并進(jìn)行閱讀,點(diǎn)擊
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文范文——基于android平臺(tái)的手機(jī)電子書閱讀器設(shè)計(jì)
- 電子書城系統(tǒng) ——畢業(yè)論文
- 基于android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(優(yōu)秀)
- 基于Android電子書閱讀器研究與實(shí)現(xiàn)論文.doc
- 基于android電子書閱讀器研究與實(shí)現(xiàn)
- 基于Android的電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)論文.doc
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)評(píng)審記錄.doc
- 基于電子書包的教學(xué)模式研究 畢業(yè)論文
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)外文翻譯.doc
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)開(kāi)題報(bào)告.doc
- 智能時(shí)代手機(jī)電子書閱讀軟件盤點(diǎn)
- Linux平臺(tái)嵌入式epub電子書閱讀與管理系統(tǒng).pdf
- 基于android平臺(tái)的手機(jī)商城的畢業(yè)論文
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)中期檢查表.doc
- 基于語(yǔ)義的電子書交互閱讀.pdf
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)任務(wù)書.doc
- 基于Android的手機(jī)電子書閱讀器的設(shè)計(jì)與實(shí)現(xiàn)計(jì)劃進(jìn)程表.doc
- 基于android平臺(tái)的手機(jī)計(jì)步器設(shè)計(jì)【畢業(yè)論文】
- 基于android的電子書閱覽器的設(shè)計(jì)與實(shí)現(xiàn)職業(yè)學(xué)院畢業(yè)論文
- 臺(tái)灣電子書及平臺(tái)現(xiàn)況介紹
評(píng)論
0/150
提交評(píng)論