freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android系統(tǒng)的手機(jī)電子書(shū)閱讀器-閱讀頁(yè)

2025-06-15 08:57本頁(yè)面
  

【正文】 書(shū)簽信息 章節(jié)信息 設(shè)置信息17在線書(shū)城:下載電子書(shū)到本地。閱讀設(shè)置:閱讀基本屬性的設(shè)置,關(guān)鍵字搜索,翻頁(yè)特效,分享等功能。支持批量刪除。支持批量刪除。圖 43 是系統(tǒng)的用例圖用戶閱讀書(shū)籍添加書(shū)籍刪除書(shū)籍添加書(shū)簽刪除書(shū)簽閱讀屬性設(shè)置提取章節(jié)分享好友20 圖 43 電子書(shū)閱讀器的用例圖 系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì) [5]用戶界面層呈現(xiàn)的數(shù)據(jù)和業(yè)務(wù)邏輯層處理的數(shù)據(jù)都是依賴于數(shù)據(jù)庫(kù)中的數(shù)據(jù)。以下就是數(shù)據(jù)庫(kù)的具體內(nèi)容:1) 電子書(shū)的基本信息需要一張專門的表來(lái)保存,包括書(shū)名、作者、路徑、添加時(shí)間、閱讀進(jìn)度等字段。所以我是把所有的書(shū)簽都保存到一張書(shū)簽表中,根據(jù)字段 book_id 來(lái)區(qū)分是那本書(shū)的,在根據(jù)字段 book_category_id 來(lái)區(qū)分是那個(gè)書(shū)簽,這要就不需要為每本書(shū)都建立一張書(shū)簽表。所以我就建立一張表來(lái)保存書(shū)籍章節(jié),根據(jù)字段 book_id 來(lái)區(qū)分章節(jié)是屬于哪本書(shū)的。具體的閱讀設(shè)置表(book_read_setting 表)如表 45 所示:表 45 電子書(shū)閱讀器的閱讀設(shè)置表5)斷點(diǎn)續(xù)傳下載,就是我們?cè)谝淮蜗螺d未結(jié)束時(shí),暫停下載,第二次下載時(shí)會(huì)接著第一次下載的進(jìn)度繼續(xù)下載。而不宜與直接存入數(shù)據(jù)庫(kù),所以我22選擇把電子書(shū)直接存放在文件系統(tǒng)中,而在書(shū)架中添加一行信息,字段 book_path 對(duì)于存放電子書(shū)的路徑。第一,界面的實(shí)現(xiàn);第二,功能的實(shí)現(xiàn);第三,控件的調(diào)用。在 Android 平臺(tái)中所有的控件都是繼承了 View 這個(gè)超類,所以在我們自定義一個(gè)控件的時(shí)候也需要繼承這個(gè)超類,但是有些情況下不需要繼承這個(gè)23超類而是繼承它的子類,如基于 Google Android 平臺(tái)的新聞閱讀器中,就繼承了這個(gè)超類的子類 ViewGroup,即: public class TabController extends ViewGroup{}。2)功能的實(shí)現(xiàn)。 (3)控件的調(diào)用。在自定義控件中,其調(diào)用的形式是通過(guò)命名空間的形式來(lái)進(jìn)行調(diào)用的。而使用自定義的控件——MainTab ,此控件從需求上必須能彌補(bǔ)系統(tǒng)控件 TabHost 的不足,且能易于用戶操作。該軟件的主界面是一個(gè) Activity,Android 工程在啟動(dòng)每一個(gè) Activity 時(shí)都會(huì)首先執(zhí)行 onCreate()方法,如下:該方法主要執(zhí)行界面的初始化操作,其中有 setContentView(int resId)方法設(shè)置Activity 的布局,resId 是布局文件的資源索引 Id,源文件在 res/layout 目錄下,主界面的布局文件時(shí) 。RadioButton 的布局設(shè)置如下:其中重新自定義了 RadioButton 的樣式:style=style/main_tab主界面運(yùn)行的截圖如圖 51:26 圖 51 電子書(shū)閱讀器主界面運(yùn)行圖 主界面中子界面的實(shí)現(xiàn)主界面中實(shí)現(xiàn)三個(gè)界面的切換,分別是書(shū)架界面、書(shū)簽界面、書(shū)城界面,其中書(shū)架界面對(duì)應(yīng)的布局文件是 ,而書(shū)簽和書(shū)城界面并沒(méi)有與之相對(duì)應(yīng)的布局文件,是在代碼里面直接創(chuàng)建的。書(shū)架界面的布局文件中主要定義了三個(gè)控件,分別是 ListView、SlidingDrawer 和自定義的一個(gè) SD 卡遍歷控件 FileBrowser。ListView 顯示內(nèi)容需要一個(gè)適配器,Android 自帶的一些適配器如ArrayAdapter、SimplaAdapter 等,但這些顯示比較單一,所以本軟件中自定義一個(gè)Adapter 繼承 BaseAdapter,通過(guò)對(duì)這個(gè)適配器的擴(kuò)展實(shí)現(xiàn)我們需要的效果,擴(kuò)展成一行能顯示多個(gè)內(nèi)容。ListView有一個(gè)監(jiān)聽(tīng)器OnItemClickListner,實(shí)現(xiàn)里面的方法,就可以監(jiān)聽(tīng)Touch事件,當(dāng)手指點(diǎn)擊到每一行時(shí),可以通過(guò)監(jiān)聽(tīng)器方法public void onItemClick (AdapterView? parent, View view, int position,long id)方法中的參數(shù)position得到 該行位置,這樣就可以通過(guò)intent傳遞數(shù)據(jù)到其他Activity。SlidingDrawer隱藏屏外的內(nèi)容,并允許用戶通過(guò)handle以顯示隱藏內(nèi)容,這是一種類似抽屜開(kāi)關(guān)的那種效果。它里面的控件必須設(shè)置布局,在布局文件中必須指定handle和content。在本軟件中的handle是一個(gè)ImageButton,而content這是在上文中提到的自定義的SD卡遍歷控件FileBrowser。 圖 52 電子書(shū)閱讀器書(shū)架截圖 圖 53 電子書(shū)閱讀器書(shū)架打開(kāi)SD卡截圖282) 書(shū)簽界面和書(shū)城界面的實(shí)現(xiàn)書(shū)簽和書(shū)城界面的實(shí)現(xiàn)十分相似,區(qū)別就是在書(shū)城界面上有一個(gè)供下載點(diǎn)擊的按鈕,而書(shū)簽界面沒(méi)有。關(guān)于列表項(xiàng)的呈現(xiàn)就和上文中書(shū)架界面的實(shí)現(xiàn)十分相似了,也是通過(guò)反轉(zhuǎn)布局文件來(lái)顯示項(xiàng)的視圖,反轉(zhuǎn)的布局文件分別是 和。翻頁(yè)效果的實(shí)現(xiàn)會(huì)在下文中做詳細(xì)的說(shuō)明。29由于閱讀是的功能比較多,如果僅僅使用 Android 系統(tǒng)自帶的 Menu 顯然已經(jīng)不能滿足界面友好的要求。TabMenu 主要是通過(guò)使用 PopupWindow 來(lái)實(shí)現(xiàn)的,設(shè)置 popupwindow 的 view 是一個(gè) GridView,gridview 中是兩個(gè)標(biāo)題選項(xiàng)欄,就是菜單功能組,而在每個(gè)標(biāo)題選項(xiàng)欄中又都有一些子選項(xiàng)欄。為了能是 TabMenu 更像 Menu 的體驗(yàn),就摸擬了 Menu 顯示和消失的效果,效果的實(shí)現(xiàn)是通過(guò)動(dòng)畫(huà)來(lái)模擬的,主要是創(chuàng)建兩個(gè)動(dòng)畫(huà)的文件:Tabmenu 打開(kāi)時(shí)的動(dòng)畫(huà) TabMenu 關(guān)閉時(shí)的動(dòng)畫(huà) TabMenu 的顯示效果如圖 57 所示:30 圖 56 閱讀界面運(yùn)行截圖 圖 57 TabMenu 顯示效果截圖 數(shù)據(jù)庫(kù)的實(shí)現(xiàn)在 Android 系統(tǒng)內(nèi)嵌了一個(gè)輕量級(jí)數(shù)據(jù)庫(kù) SQLiteDataBase,它占用的資源非常低、需要的內(nèi)存空間少、處理速度比較快和支持事務(wù)處理功能等。Android 數(shù)據(jù)庫(kù)的存儲(chǔ)位置在 data/data/項(xiàng)目文件夾/databases/目錄下,Android 是利用 ContentProvider 作為內(nèi)容提供商,SQLiteOpenHelper 數(shù)據(jù)庫(kù)幫助類來(lái)進(jìn)行對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建和操作。程序中數(shù)據(jù)庫(kù)的類為 BookOpenHelper extend SQLiteOpenHelper 和BookContentProvider extend ContentProvider。在此層中的結(jié)構(gòu)體對(duì)應(yīng)著數(shù)據(jù)庫(kù)中幾個(gè)表的具體數(shù)據(jù):建立書(shū)籍信息結(jié)構(gòu)體如下所示:public class Book{32private int bookId。 //書(shū)名private String bookAuthor。 //書(shū)籍路徑private String bookAddTime。 //最后打開(kāi)時(shí)間private int bookCategoryId。//所屬類別名private String bookSize。 //最后閱讀進(jìn)度set、get 方法略……………………………..}建立書(shū)簽信息結(jié)構(gòu)體如下所示:public class BookMark{private int bookMarkId。 //書(shū)籍 IDprivate String bookName。 //書(shū)籍路徑private String bookMarkAddTime。//書(shū)簽進(jìn)度private String bookMarkDetail。 //書(shū)簽添加時(shí)文本 Begin 值set、get 方法略……………………………..}建立書(shū)籍章節(jié)結(jié)構(gòu)體如下所示:public class BookChapter{33private int bookId。 //書(shū)名private String bookChapterName。//章節(jié)界面文本 Begin 值set、get 方法略……………………………..}建立書(shū)籍閱讀設(shè)置結(jié)構(gòu)體如下所示:public class BookReadSetting{private int bookId。 //字體大小private String bookBgStyle。 //字體顏色 RGB中的R值private int bookFontG。 //字體顏色 RGB中的B值private int bookBgR。 //背景顏色RGB 中的G值private int bookBgB。//文本左右邊距private int bookMarginHeight。FileBroswer 的設(shè)計(jì)流程如下圖所示:34開(kāi)始讀取當(dāng)前目錄下所有的的目錄和文件在 ListView 上顯示讀取的結(jié)果是否為目錄是否進(jìn)一步處理是否電子書(shū)是直接打開(kāi)電子書(shū) 加入書(shū)架是將電子書(shū)信息讀取,并保存進(jìn)數(shù)據(jù)庫(kù)提示否圖 58 FileBroswer 的設(shè)計(jì)流程圖 閱讀界面效果和功能的實(shí)現(xiàn)1)電子書(shū)內(nèi)容呈現(xiàn)首先讀取選中的電子書(shū)數(shù)據(jù)庫(kù)中的相關(guān)信息,根據(jù)電子書(shū)在本地的路徑讀取內(nèi)容,獲取一個(gè)內(nèi)容的MappedByteBuffer對(duì)象,代碼是MappedByteBuffer m_mbBuf = new RandomAccessFile(book_file,r).getChannel().map(EAD_ONLY, 0, lLen),這里使用新IO流MappedByteBuffer是因?yàn)槠鋵?duì)文件的處理效率遠(yuǎn)遠(yuǎn)的高于IO。在繪制之前得到一個(gè)畫(huà)筆paint,并設(shè)置paint的顏色、大小等屬性。電子書(shū)閱讀設(shè)計(jì)的工作流程圖如下:開(kāi)始從數(shù)據(jù)庫(kù)中讀取選中電子書(shū)的信息根據(jù)電子書(shū)本地路徑讀取電子書(shū)內(nèi)容調(diào)用 onDraw()繪制閱讀界面翻頁(yè)閱讀是否第一次打開(kāi)是否 讀取數(shù)據(jù)庫(kù)中閱讀進(jìn)度或章節(jié)進(jìn)度設(shè)置 begin 值書(shū)簽閱讀設(shè)置閱讀屬性 章節(jié)閱讀 將章節(jié)信息存入數(shù)據(jù)庫(kù)退出,并將閱讀進(jìn)度,閱讀屬性存入數(shù)據(jù)庫(kù)圖 59 電子書(shū)閱讀器閱讀界面設(shè)計(jì)流程圖 在線書(shū)城斷點(diǎn)續(xù)傳下載的實(shí)現(xiàn)斷點(diǎn)續(xù)傳 [3]下載,顧名思義,那就是我們?cè)谝淮蜗螺d未結(jié)束時(shí),退出下載,第二次下載時(shí)會(huì)接著第一次下載的進(jìn)度繼續(xù)下載。而且是把文件分成幾段各使用一個(gè)線程下載。36部分代碼實(shí)現(xiàn)如下:① 下載電子書(shū)網(wǎng)絡(luò)資源HttpURLConnection connection = null。InputStream is = null。connection = (HttpURLConnection) ()。(GET)。(Range, bytes=+ (startPos + peleteSize) + + endPos)。(startPos + peleteSize)。byte[] buffer = new byte[4096]。while ((length = (buffer)) != 1) {(buffer, 0, length)。// 更新數(shù)據(jù)庫(kù)中的下載信息(threadId, peleteSize, urlstr)。 = 1。 = length。if (state == PAUSE) {37return。} finally {try {()。()。} catch (Exception e) {()。int range = fileSize / threadcount。for (int i = 0。 i++) {DownloadInfo info = new DownloadInfo(i, i * range, (i + 1)* range 1, 0, urlstr)。}DownloadInfo info = new DownloadInfo(threadcount 1,(threadcount 1) * range, fileSize 1, 0, urlstr)。// 保存infos中的數(shù)據(jù)到數(shù)據(jù)庫(kù)(infos)。return loadInfo。(TAG, not isFirst size= + ())。int peleteSize = 0。size += () () + 1。}具體的設(shè)計(jì)流程如下圖所示:39開(kāi)始讀取選中的電子書(shū)的 URL 地址計(jì)算電子書(shū)長(zhǎng)度根據(jù)設(shè)定的下載線程數(shù)將電子書(shū)文件分段是否為第一次下載讀取數(shù)據(jù)庫(kù)中信息是否繼續(xù)上次進(jìn)度下載連接網(wǎng)絡(luò)資源HttpURLConnection將下載信息保存進(jìn)數(shù)據(jù)庫(kù)啟動(dòng)多個(gè)線程下載電子書(shū)暫停 繼續(xù)下載完成清空數(shù)據(jù)庫(kù)信息圖 510 電子書(shū)閱讀器在線下載設(shè)計(jì)流程圖40本文,通過(guò)對(duì) Android 簡(jiǎn)要介紹,概述了其眾多的優(yōu)點(diǎn)和其對(duì)整個(gè)智能手機(jī)乃至手機(jī)軟件開(kāi)發(fā)行業(yè)的意義和重要性,闡明了其研究的重要性和必行性。根據(jù)項(xiàng)目本身的特點(diǎn)進(jìn)行了功能設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和界面設(shè)計(jì)。并熟悉了 Android 平臺(tái)的相關(guān)特性,增強(qiáng)了自己的編碼能力、獨(dú)立動(dòng)手能力和邏輯思考能力,為畢業(yè)以后的工作打下良好的基礎(chǔ)。EPub 檔案內(nèi)部使用了XHTML 或 DTBook (一種由 DAISY Consortium 提出的 XML 標(biāo)準(zhǔn))來(lái)展現(xiàn)文字、并以 zip壓縮格式來(lái)包裹檔案內(nèi)容。最后會(huì)把此次畢業(yè)設(shè)計(jì)項(xiàng)目發(fā)布到 Google Android Market 上,并根據(jù)用戶的反饋意見(jiàn)和使用情況進(jìn)行 BUG 的修改和功能的優(yōu)化
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1