基于Android系統(tǒng)的電子書閱讀器的設(shè)計與實現(xiàn)_第1頁
基于Android系統(tǒng)的電子書閱讀器的設(shè)計與實現(xiàn)_第2頁
基于Android系統(tǒng)的電子書閱讀器的設(shè)計與實現(xiàn)_第3頁
基于Android系統(tǒng)的電子書閱讀器的設(shè)計與實現(xiàn)_第4頁
基于Android系統(tǒng)的電子書閱讀器的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.PAGE.4.3.2建表語句1創(chuàng)建:1、創(chuàng)建書的表:createtableIFNOTEXISTSbook<bidintegerprimarykeyautoincrement,bpathvarchar<255>notnull>;2、創(chuàng)建書簽的表:createtableIFNOTEXISTSbookmark<bmidintegerprimarykeyautoincrement,bpathvarchar<50>notnull,bmnamevarchar<50>notnull,bmoffsetintegernotnull,bmsavetimevarchar<20>notnull>;3、創(chuàng)建用戶管理的表:createtableIFNOTEXISTSuser<useridintegerprimarykeyautoincrement,usernamevarchar<20>notnull,passwordvarchar<20>notnull,telephonevarchar<20>notnull>;4、創(chuàng)建最近閱讀的表createtableIFNOTEXISTSnearlyread<bookidintegerprimarykeyautoincrement,booknamevarchar<50>notnull,bookreadtimevarchar<20>notnull>;5、創(chuàng)建下載管理的表createtableIFNOTEXISTSdown<downidintegerprimarykeyautoincrement,downuservarchar<20>notnull,downbookvarchar<20>notnull,downtimevarchar<20>notnull>;2SQlite3數(shù)據(jù)庫使用方法:選擇:selectfrombookmarkwherebmid=1;插入:insert<bookmark,null,values>;刪除:deletefrombookmarkwherebmid=3;查找:query<table,columns,selection,selectionArgs,groupBy,having,orderBy>數(shù)據(jù)表分析本數(shù)據(jù)庫用的是一個輕量級嵌入型數(shù)據(jù)庫sqlite3,即創(chuàng)建了一個數(shù)據(jù)庫reader.db,在數(shù)據(jù)庫中創(chuàng)建了幾張數(shù)據(jù)表。在建設(shè)網(wǎng)站系統(tǒng)或者軟件之前,我們必須對系統(tǒng)所用到的數(shù)據(jù)進行大致的分類和具體的結(jié)構(gòu)設(shè)計,既要做到清晰明了,又要能適應系統(tǒng)各項功能的調(diào)用,而不至于產(chǎn)生結(jié)構(gòu)上的邏輯混亂,保證關(guān)鍵數(shù)據(jù)在意外情況下不會被破壞,可以說數(shù)Book表〔用來存放書籍,如表4-1:字段名稱數(shù)據(jù)類型條件約束bidintegerprimarykeybpathvarchar<255>notnull表4-1書籍數(shù)據(jù)表Bookmark表〔管理書簽,如表4-2:字段名稱數(shù)據(jù)類型條件約束BmidIntegerprimarykeyBpathvarchar<50>notnullBmnamevarchar<50>notnullbmoffsetIntegernotnullmsavetimevarchar<20>notnull表4-2書簽數(shù)據(jù)表User表〔用戶數(shù)據(jù),如表4-3:字段名稱數(shù)據(jù)類型條件約束UseridIntegerprimarykeyusernamevarchar<50>notnullpasswordvarchar<50>notnulltelephonevarchar<20>notnull表4-3用戶數(shù)據(jù)表Nearlyread表〔最近閱讀,如表4-4:字段名稱數(shù)據(jù)類型條件約束BookidIntegerprimarykeybooknamevarchar<50>notnullbookreadtimevarchar<20>notnull表4-4最近閱讀數(shù)據(jù)表Down表〔下載,如表4-5::字段名稱數(shù)據(jù)類型條件約束DownidIntegerprimarykeyDownuservarchar<50>notnulldowntimevarchar<20>notnull表4-5 下載數(shù)據(jù)表獲取sd卡上的txt文本由于一個Android模擬器或者是一個手機客戶終端上只會配置一個sdcard,所以一步移動設(shè)備上有各種各樣的應用App,而且各種App都可能會由數(shù)據(jù)或者文件存儲到移動設(shè)備的sdcard上,故而有各式各樣的文件類型是該款軟件不需要的。也是用戶選擇本款軟件時所不需要的信息文件,于是通過構(gòu)造一個過濾式的方法讓軟件只接受來自sdcard上的TXT格式的文本文件。該方法是先通過判斷是否存儲路徑是sdcard,通過getRecordFiles〔方法過濾掉其他無用文件,將剩余的TXT文件放置集合AirrayList中,然后通過Android的空間Listview將其目錄結(jié)構(gòu)文件給顯示出來。代碼如下:privatevoidgetRecordFiles<>{recordFiles=newArrayList<String><>;if<isSdcard>{ Filefiles[]=txtDir.listFiles<>;if<files!=null>{for<inti=0;i<files.length;i++>{if<files[i].getName<>.indexOf<".">>=0>{/*只取.txt文件*/ Stringfile=files[i].getName<>.substring<files[i].getName<>.indexOf<".">>;if<file.toLowerCase<>.equals<".txt">>recordFiles.add<files[i].getName<>>; } } } }}..獲取文件名獲取文件名開始開始獲取文件TXT文件?過濾存放至集合結(jié)束是否 圖5-1文件過濾流程圖長按選項刪除 可能在漫長的使用軟件生活中,用戶會在sdcard里面積累十分多的TXT文件數(shù)量,所以這里提供一個刪除功能供用戶刪除一些很久不用的文件。該功能通過獲取到Android控件ListView上每一條Item的長按事件進行綁定事件監(jiān)聽,通過該行為進行功能描述,通過獲取系統(tǒng)對于sdcard里面文件的操作權(quán)限來對于sdcard里面的TXT文件進行刪除。下面是刪除的方法delFile〔的部分代碼實現(xiàn):publicvoiddelFile<StringfilePathAndName>{try{ StringfilePath="/sdcard/"+filePathAndName; filePath=filePath.toString<>; java.io.FilemyDelFile=newjava.io.File<filePath>; myDelFile.delete<>; }catch<Exceptione>{ Toast.makeText<this,"刪除文件操作出錯",1000>.show<>; e.printStackTrace<>; } }閱讀文本界面的實現(xiàn) 這是該款軟件最基本也是最重要的功能——對于TXT文本文件的可視化讀取。由于軟件中對于sdcard里面的文件的讀取可以是從各種各樣的界面上獲取要讀取的TXT文件資源,比如可以從本地管理列表直接讀取,也可以從最近閱讀列表讀取,或者是從閱讀界面來讀取該文本的書簽從而讀取文本文件的某一段。所以,通過Android的Intent〔意圖方式傳遞數(shù)據(jù),數(shù)據(jù)包括了實現(xiàn)本界面的Activity類名,也包括了要閱讀文本的書名,還有就是要讀取文件的開始頁碼比例。如果是非進度跳轉(zhuǎn)功能,或者是書簽的功能則默認進度讀取開始頁碼也第一頁。而這些數(shù)據(jù)則通過封裝到某個對象中,用bundle傳遞給Intent,再通過Intent轉(zhuǎn)發(fā)數(shù)據(jù)。以下便是通過BitmapFactory工廠封裝了一些繪制閱讀背景的方法的部分代碼實現(xiàn):mPageWidget.setBitmaps<mCurPageBitmap,mNextPageBitmap>;mPageWidget.setOnTouchListener<newOnTouchListener<>{OverridepublicbooleanonTouch<Viewv,MotionEvente>{booleanret=false;if<v==mPageWidget>{if<e.getAction<>==MotionEvent.ACTION_DOWN>{mPageWidget.abortAnimation<>;mPageWidget.calcCornerXY<e.getX<>,e.getY<>>;pagefactory.onDraw<mCurPageCanvas>;if<mPageWidget.DragToRight<>>{try{pagefactory.prePage<>; }catch<IOExceptione1>{ e1.printStackTrace<>; } if<pagefactory.isfirstPage<>>returnfalse;pagefactory.onDraw<mNextPageCanvas>; }else{try{pagefactory.nextPage<>; }catch<IOExceptione1>{ e1.printStackTrace<>; }if<pagefactory.islastPage<>>returnfalse;pagefactory.onDraw<mNextPageCanvas>; }mPageWidget.setBitmaps<mCurPageBitmap,mNextPageBitmap>; } ret=mPageWidget.doTouchEvent<e>;returnret; }returnfalse; } }>; }開始獲取文件名開始獲取文件名初始頁面是否為%1?隨機I/O流打開結(jié)束I/O流打開是否 圖5-2隨機流打開文件流程圖menu按鈕功能的實現(xiàn) 添加書簽功能——作為一款電子書閱讀器軟件,這個功能是個輕松快捷而且不可避免的功能,它能夠?qū)㈤L篇的文本文件斷點記錄。如果用戶在長時間的閱讀過程中感覺到疲乏,但是文件依然沒法短時間內(nèi)看完,為了方便下次閱讀則將當前頁面記錄,下次則可以直接點擊進入需要的頁面閱讀。該功能通過記錄了文件的總字節(jié)長度及當前的閱讀長度進行百分比計算。當前頁面的字節(jié)則是通過之前已經(jīng)計算好了的字體大小,每頁會大概的存放多少字節(jié)數(shù)。privatevoidsaveBookMarkDialog<>{finalDialogd=newDialog<turntest.this>; d.setTitle<"添加書簽">; d.setContentView<R.layout.bookmark_dialog>;finalEditTextet=<EditText>d.findViewById<R.id.bmet>;finalButtonsure=<Button>d.findViewById<R.id.bmsure>;finalButtoncancel=<Button>d.findViewById<R.id.bmcancel>;//確定動作 sure.setOnClickListener<newView.OnClickListener<>{publicvoidonClick<Viewv>{ Stringbmn=et.getText<>.toString<>;if<bmn.length<><1>{ d.dismiss<>; d.show<>; }else{if<bmn.length<>>10>{ bmn.substring<0,10>; } BookMarkbm=newBookMark<>; bm.setBookPath<txtname>; bm.setMarkName<bmn>; bm.setCurrentOffset<pagefactory.m_mbBufEnd>; bm.setSaveTime<DateUtil.dateToString<newDate<>>>;mHelper=newCRDBHelper<getApplicationContext<>>;operateResult=mHelper.addBookMark<bm>;mHelper.close<>;if<operateResult>{ Toast.makeText<turntest.this,"添加成功",1000>.show<>; }else{ Toast.makeText<turntest.this,"添加失敗",1000>.show<>; } d.dismiss<>; } } }>;以下是查找書簽及實現(xiàn)跳轉(zhuǎn)的部分代碼實現(xiàn):list=newArrayList<String><>;for<inti=0;i<mBookMarkList.size<>;i++>{ Stringmark=mBookMarkList.get<i>.getMarkName<>+""+mBookMarkList.get<i>.getSaveTime<>;list.add<mark>; }list_tag=<ListView>findViewById<R.id.list_tag>;adapter=newArrayAdapter<ShowBookmark.this,list_tag.setAdapter<adapter>;//短按跳到書簽list_tag.setOnItemClickListener<newOnItemClickListener<>{OverridepublicvoidonItemClick<AdapterView<?>arg0,Viewarg1,intarg2,longarg3>{//獲取到所點擊的書簽的定位intOffset=mBookMarkList.get<arg2>.getCurrentOffset<>; IntentmIntent=newIntent<ShowBookmark.this,turntest.class>; BundlemB=newBundle<>; mB.putString<"Activity","ShowBookmarkActivity">; mB.putInt<"Offset",Offset>; mIntent.putExtras<mB>; startActivity<mIntent>; finish<>; } }>;刪除書簽:該功能就是簡單的運用對于書簽的SQLite數(shù)據(jù)庫操作,通過對于ListView組件的長按事件添加監(jiān)聽,程序自動生成對話框。以下是部分代碼實現(xiàn):list_tag.setOnItemLongClickListener<newOnItemLongClickListener<>{OverridepublicbooleanonItemLongClick<AdapterView<?>arg0,Viewarg1,intarg2,longarg3>{finalintpos=arg2;newAlertDialog.Builder<ShowBookmark.this>.setTitle<"提示"> .setMessage<"刪除該書簽"> .setPositiveButton<"確定",newOnClickListener<>{OverridepublicvoidonClick<DialogInterfacedialog,intwhich>{booleanb=mHelper.deleteBookMark<mBookMarkList.get<pos>.getBookMarkId<>>;if<b&&mBookMarkList.size<>>0>{list.remove<pos>;adapter.notifyDataSetChanged<>; } } }>.setNegativeButton<"取消",newOnClickListener<>{OverridepublicvoidonClick<DialogInterfacedialog,intwhich>{ dialog.dismiss<>; } }>.show<>;returnfalse; } }>;//退出6.1功能界面打開軟件,會從Logo界面自動跳轉(zhuǎn)到該功能界面,該功能的實現(xiàn)只是簡單的通過Android系統(tǒng)的界面設(shè)計,通過對其TabHost選項卡組件的運用將界面縱向平行的設(shè)計為三個覆蓋的界面,點擊則切換成指定的選項界面,如圖5-1:圖5-1功能界面6.2書籍選擇主界面打開軟件,軟件就自動加載sd卡上的txt文檔,該列表通過獲取Android系統(tǒng)的Sdcard的路徑然后獲取到里面的所有文件,然后通過文件名后綴來判別是否為.TXT結(jié)尾的文件將其添加進入數(shù)據(jù)庫,然后通過數(shù)據(jù)庫查詢列出所有該書籍表里面的集合從而列出要選擇的文檔,如圖5-2:圖5-2書籍選擇界面6.3用戶閱讀界面用戶左鍵單擊要閱讀的電子書籍,進入由Android的畫筆類,通過調(diào)用BitmapFactory工廠方法onDraw繪制動態(tài)頁面效果,畫面產(chǎn)生獲取頁面坐標事件,根據(jù)坐標來判斷是向前翻頁還是向后翻頁,如圖5-3是向后翻頁:圖5-3用戶閱讀界面6.4菜單點擊menu按鈕,就回出現(xiàn)選擇界面,增加書簽、查看書簽、退出閱讀。如圖5-4:圖5-4Menu菜單功能6.5書簽操作點擊添加書簽,會出現(xiàn)一個添加書簽的界面,如圖5-5圖5-5添加書簽點擊查看標簽就會出現(xiàn)相應文檔的標簽列表,如圖5-6圖5-6書簽列表長按某個選項就會刪除標簽。如圖5-6圖5-7刪除書簽如果取消則返回標簽界面,如果確定則刪除書簽。6.6書籍操作刪除文檔界面,從5-1圖中刪除xyy2.txt長按菜單鍵,該功能是對于Android組件ListView的長按事件的添加監(jiān)聽功能,如圖5-8:圖5-8刪除書籍6.7最近閱讀在閱讀過得書籍會添加進最近閱讀數(shù)據(jù)庫,方便用戶后期直接點擊進入閱讀,如圖5-9:圖5-9最近閱讀列表6.8用戶登錄通過與服務(wù)器的連接獲取服務(wù)器提供了最新最熱的書籍推薦,先登陸可以記錄該用戶的下載記錄。如圖:圖5-10在線登陸界面6.9在線中心圖5-11服務(wù)器獲取的最新資源6.10性能分析概述及方案特點本軟件是利用java語言在android平臺上實現(xiàn)的一款閱讀軟件,使用起來方便,非常容易使用,也方便用戶的操作,最重要的特點就是實現(xiàn)簡單,沒有過于復雜冗余的操作。數(shù)據(jù)庫是使用sqlite3來進行存數(shù)。方案特點:<1>系統(tǒng)先進性本系統(tǒng)的先進性主要體現(xiàn)在能觸屏翻頁,能顯示已經(jīng)閱讀的進度,大大減少了占用用戶的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論