




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、鄭州大學畢業(yè)設計(項目報告)題 目: 手機電子書閱讀器的設計與實現 指導教師: 張淑艷 職稱: 講師 學生姓名: 王明 學號: 20117740444 專 業(yè): 計算機科學與技術(軟件測試) 院(系): 軟件學院 完成時間: 2014 年 12 月 2014 年 12 月 29 日目錄目錄摘要摘要.11 項目開發(fā)目標.11.1 項目來源.11.2 開發(fā)目標.12 項目總體設計.22.1 技術框架設計.22.2 數據庫設計.22.3 功能框架設計.53 項目功能描述.83.1 軟件歡迎界面模塊功能描述.83.2 主界面功能描述.103.3 書籍管理模塊功能描述.123.4 文件瀏覽模塊功能描述.
2、163.5 閱讀管理模塊功能描述.203.5.1 章節(jié)管理模塊功能描述.243.5.2 書簽管理模塊功能描述.273.5.3 搜索管理模塊功能描述.283.6 設置管理模塊功能描述.293.7 使用幫助模塊功能描述.353.8 關于模塊功能描述.364 項目技術總結.384.1 技術創(chuàng)新及特點.384.2 個人收獲與體會.444.3 致謝.441摘要摘要在這個快節(jié)奏的時代,人們的空余時間越來越零碎,而且人們對智能手機的依賴越來越重,所以,一個擁有豐富功能且能隨時進行電子書閱讀的電子書閱讀器的出現,則是我們刻不容緩的事情。此軟件是在 Android 平臺上進行設計開發(fā),此軟件的開發(fā)是通過了客戶需
3、求分析階段以及技術可行性分析階段,然后進行總體設計階段和詳細設計編碼等階段。此軟件不僅具有基本的電子書閱讀功能,而且還擁有豐富的實用功能設計,例如目錄自動生成以及閱讀界面設置、閱讀休息提醒等。經過不斷的測試與完善,電子書閱讀器功能穩(wěn)定,并且在真機上對其進行了測試與驗證,基本上達到了用戶的需求標準。關鍵字:電子書閱讀器關鍵字:電子書閱讀器, Android,文件瀏覽文件瀏覽,書架書架 21 1 項目開發(fā)目標項目開發(fā)目標1.11.1 項目來源項目來源此次開發(fā)的項目是手機電子書閱讀器,屬于自選項目。隨著社會的發(fā)展,人們的生活節(jié)奏也越來越快空閑時間也越來越零碎,人們沒有了大段的時間來進行書籍的閱讀,所
4、以一款能利用零碎時間進行隨時閱讀的軟件成為了我們的需求。而一款能在人們隨身攜帶的手機上運行的閱讀軟件成為了大家的選擇。以前我們看看雜志,小說都要去圖書館借閱,而且時間有限,很不方便;而在電腦上看雜志,看小說,文檔也是很不方便的。以此看來,一個好的手機閱讀器軟件的開發(fā)是相當有必要的。1.21.2 開發(fā)目標開發(fā)目標手機電子書閱讀器的開發(fā)目標就是讓用戶可以把零碎的空余時間有效的利用到書籍的閱讀上,而且用戶在沒有網路的情況下也可以正常的進行書籍的閱讀,讓用戶擺脫書籍的笨重攜帶不方便等確定,給予閱讀者更大的便利性更好的舒適性。此軟件是在 Android 平臺上進行設計開發(fā),它的界面豐富簡潔但是卻不簡單,
5、它包含了書架界面、文件查看界面、軟件設置界面、書籍閱讀界面等界面,它的功能全面。其優(yōu)越性表現在:自動掃描手機里的所有書籍、手動從文件夾中選擇添加書籍、自動為書籍生成章節(jié)目錄、添加查看書簽、全文關鍵詞搜索、閱讀主題選擇、閱讀字體大小設置等功能。此外,給用戶更清晰方便的界面,也是本軟件的出發(fā)點之一。32 2 項目總體設計項目總體設計2.12.1 技術框架設計技術框架設計手機電子書閱讀器采用了常見的三層架構,分別為 UI 層、業(yè)務邏輯層和數據層。UI 層:數據展示與管理、用戶交互、繪制、Adapter。業(yè)務邏輯層:數據加式(數據層的數據有時候需要進行加工成 UI 層需要的數據) 、數據變化的通知機制
6、數據層:數據訪問(SQLite、文件等) 、緩存(圖片、文件等) 、配置文件(shared perference)此軟件的開發(fā)環(huán)境:Windows7 + Eclipse4.2.0 + SDK。UI ViewsData AdapterU UI IBLData ObserverB BL LFileSQLiteData ProviderMemory CacheLocal DataUtil/ConfigDataData圖 1 軟件框架結構2.22.2 數據庫設計數據庫設計E-R 圖是直觀表示概念模型的工具,它有四個基本成分:4矩形框,表示實體類型。菱形框,表示聯(lián)系類型。橢圓形框,表示實體類型和聯(lián)系類型
7、的屬性。對于關鍵碼的屬性,在屬性名下劃一橫線。直線,聯(lián)系類型與其涉及的試題類型之間以直線連接。書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書書 書書 書 書 書書 書 書 書書 書 書 書書 書 書 書n n書 書 書 書書 書 書 書1 1書 書 書 書圖 2 ER 圖數據庫使用了 2 個實體,分別為書籍、書簽。書籍與書簽的對應關系為 1:n。在數據庫的設計方面,為了實現數據庫的完整性與一致性,我們使用了觸發(fā)器,在數據庫的選用上,選擇了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎的 SQLite 數據庫,數據庫名稱為
8、 eBook.db,共 2 個實體表,分別為書籍表、書簽表。與書籍(books)實體類的屬性信息對應的字段信息表如表 1 所示:字段名類型說明book_idINTEGER書籍編號book_nameTEXT書籍名稱book_pathTEXT書籍路徑file_sizeTEXT書籍大小last_readDATETIME閱讀時間book_shelfINTEGER所屬書籍read_percentageDOUBLE已讀比例posINTEGER閱讀位置表 1 書籍表書籍表(books)創(chuàng)建的 SQL 語句:5CREATE TABLE books (book_id INTEGER PRIMARY KEY,bo
9、ok_name TEXT NOT NULL, book_path TEXT NOT NULL UNIQUE, file_size TEXT, last_read DATETIME DEFAULT(datetime(CURRENT_TIMESTAMP,localtime),book_shelf INTEGER,read_percentage DOUBLE DEFAULT 0,pos INTEGER DEFAULT 0 ); 與書簽(bookMarks)實體類的屬性信息對應的字段信息表如表 2 所示:字段名類型說明idINTEGER書簽編號book_idINTEGER書籍編號percentDOUB
10、LE位置比例contentTEXT書簽內容posINTEGER書簽位置timeDATETIME添加時間表 2 書簽表書簽表(bookMarks)創(chuàng)建的 SQL 語句: CREATE TABLE bookMarks ( id INTEGER PRIMARY KEY AUTOINCREMENT,book_id INTEGER,percent DOUBLE,content TEXT, pos INTEGER, time DATETIME DEFAULT ( datetime( CURRENT_TIMESTAMP, localtime ); 觸發(fā)器(fk_Delete)創(chuàng)建 SQL 語句:CREATE
11、 TRIGGER fk_Delete BEFORE DELETE ON booksFOR EACH ROWBEGINDELETEFROM bookMarksWHERE book_id = old.book_id;END62.32.3 功能框架設計功能框架設計密碼管理章節(jié)管理文件掃描手機電子書閱讀器閱讀管理文本搜索書簽管理清空書簽刪除書簽書籍管理系統(tǒng)設置文件瀏覽添加書簽調節(jié)亮度主題選擇修改密碼取消密碼設置密碼生成章節(jié)刪除章節(jié)加入書籍重新掃描標記文件退出確認隱藏文件添加書籍清空書架分類排序添加書籍標記文件文件排序夜間模式字體大小翻頁模式幫助關于歡迎模塊設置管理閱讀設置連續(xù)閱讀自動歸類休息提醒空閑退
12、出主界面圖 3 功能模塊圖手機電子書閱讀器軟件主要分為 8 個功能大模塊如圖 3 所示,分別是歡迎模塊、軟件主界面、書籍管理、閱讀管理、文件瀏覽、系統(tǒng)管理、使用幫助、關于。其中書籍模塊中還要文件掃描模塊,閱讀管理中有章節(jié)管理、書簽管理、搜索管理。系統(tǒng)設置中有密碼設置。其各個模塊的詳細設計如下:1.軟件歡迎模塊。該模塊主要實現的功能是,通過 Handler 來實現一個 2 秒的緩沖界面,然后通過 SharedPreferences 讀取配置文件,判斷是否有密碼。如果有密碼則跳轉至密碼驗證界面;如果沒有密碼則判斷是否為第一次使用此軟件,如果是第一次使用則跳轉至引導頁面。2.軟件主界面模塊。該模塊是
13、一個通過 TabHost 標簽組件來實現的一個分類管理功能。本界面的標簽在屏幕的最下方,分別是:文件管理、我的書架、我的設置。點擊不同的標簽則顯示不同的界面,默認顯示標簽為“我的書架”,打開選項中會出現對應的視圖。實現了將本程序關聯(lián)成手機默認打開程序中,即從外部打開文本文件時選擇查看方式中會出現本軟件圖標供用戶選擇以本軟件打開。73.書籍管理。該模塊是以書架的模式來展現書籍,并可以對書籍進行一些操作,本模塊共有 3 個書架分別為:“最近閱讀” 、 “歷史閱讀” 、 “收藏閱讀” ,默認顯示是“最近閱讀”書架。本模塊有導航按鈕和書籍選擇按鈕。當彈出導航欄時,則把書籍從每行顯示三本書籍調整到每行顯
14、示兩本書籍。導航欄中與三大項:分類排序、添加書籍、清空書籍。每項里面又有子菜單。當點擊導航里的按鈕時會顯示子功能導航,當再點擊其它按鈕時,會收起前面的子功能導航,展開當前的子功能。當單擊書籍選擇按鈕時會彈出書籍選擇窗口,選擇里面的書架則進入相應的書架界面,同時還可以通過左右滑動來切換書架界面。當單擊書籍時會打開相應的書籍閱讀界面,長按某書籍時會彈出書籍操作窗口。4.文件瀏覽。該模塊使用 ListView 組件顯示文件目錄,不同的文件類型顯示不同的圖標。最上面標題欄有導航按鈕,當點擊導航按鈕時會從左側彈出導航欄,導航欄中有標記文件按鈕、分類排序按鈕和添加到書架按鈕,點擊標記文件按鈕或長按某文件或
15、目錄時則切換到多選模式,其中有多選按鈕、反選按鈕和取消按鈕;點擊分類排序則彈出子菜單,其中有按名稱排序、按大小排序、按時間排序和按類型排序;點擊添加到書架時如果為選擇文件則自動進入多選模式讓用戶進行文件選擇,如果用戶未選擇則提示“請選擇書籍” ,進行選擇是用戶可選擇文件或目錄,系統(tǒng)會自動進行掃描,把符合要求的文件添加到“最近書架”中,并彈出提示信息,其中有失敗個數、已存在個數和成功個數。在多選模式下點擊返回按鈕或點擊標記文件會取消多選模式。非多選模式下,用戶點擊文件時本軟件會根據文件擴展名來判斷打開文件方式,如果是文本文件則直接用本軟件打開,并把其添加到“最近書架”中,其它格式則調用對應的軟件
16、打開,如果是未識別的類型則提示“沒有打開此文件的應用” 。5.閱讀管理。該模塊通過自定義一個 View 視圖來顯示書頁,通過自定義類來讀取文本內容并通過 onDraw()方法把文件名、文本內容、電量信息、時間信息和已讀百分比進行繪制成圖片,并通過 View 來把繪制的圖片顯示出來。第一次進入閱讀頁面是會有顯示引導頁面來指導用戶如何讀本頁面進行操作。本頁面操作包括點擊事件和滑動事件,點擊左側屏幕進行向上翻頁,點擊右側屏幕進行向下翻頁,點擊屏幕中間畫出菜單選項。此菜單是使用 PopupWindow 組件實現,菜單分上下兩部分,上面的菜單有返回按鈕、屏幕亮度調節(jié)按鈕和添加書簽按鈕;下面的菜單有主題選
17、擇按鈕、搜索按鈕、書簽按鈕、目錄按鈕、字體大小調節(jié)按鈕、翻頁方式按鈕、夜間模式切換按鈕和退出軟件按鈕。6.系統(tǒng)設置。系統(tǒng)設置模塊包括閱讀設置和系統(tǒng)設置。閱讀設置中有連續(xù)閱讀模式、閱讀完成時自動歸類、閱讀休息提醒和閱讀空閑退出。連續(xù)閱讀模式:下次啟動直接進入上次閱讀的界面進行繼續(xù)閱讀;閱讀完成時自動歸類:當書籍閱讀到最后一頁后對此書籍自動移至“歷史閱讀”書架中;閱讀休息提醒:設置一個時間,當用戶在閱讀頁面停留至這個時間時會彈出個提示框來提醒用戶進行休息;閱讀空閑退出:設置一個時間,當用戶停留在閱讀界面并且為對其未進行任何操作至這個時間時,系統(tǒng)會自動關閉本軟件。系統(tǒng)設置中有顯示隱藏文件、使用軟件密
18、碼、退出確認、使用幫助和關于。顯示隱藏文件:當用戶選擇此設置后會在下次啟動本軟件時在文件瀏覽中顯示隱藏文件;使用軟件密碼:用戶可以對此軟件進行密碼設置;退出時確認:當選擇此設置后,8退出軟件時會顯示一個確認框進行退出確認,未選擇此設置時則會直接退出本軟件;使用幫助:顯示本軟件的幫助信息;關于:顯示關于本軟件的信息。本軟件的設置信息全部使用 SharedPreferences 存儲。7.使用幫助。該模塊通過讀取幫助文件在 TextView 中顯示,并且為TextView 添加滾動條。文件中含有本軟件的特點、功能介紹、操作說明等, 。8.關于。該模塊的主要功能是通過一個簡單的彈出窗口來顯示本軟件的
19、版本信息、聯(lián)系方式。93 3 項目功能描述項目功能描述3.13.1 軟件歡迎界面模塊功能描述軟件歡迎界面模塊功能描述圖 4 所示為歡迎界面模塊,此模塊作用是為了使軟件的進入更連貫自然,讓用戶不感覺界面的出現突兀。兩秒后跳入其它頁面,如果有密碼跳入密碼驗證頁面如圖 6 所示,如果是第一次啟動跳入引導頁面如圖 5 所示。 圖 4 歡迎界面圖 5 引導界面 圖 6 密碼驗證界面關于歡迎頁面啟動的代碼如下:new Handler().postDelayed(new Runnable() Overridepublic void run() Intent intent=null;initSaveData(
20、);/判斷是否有密碼if(share.getString(mi_ma, ).equals()/判斷是否為第一次啟動if(share.getBoolean(first, true) edit.putBoolean(first, false);mit();intent = new Intent(WelcomeActivity.this,GuideMain.class);elseintent = new Intent(WelcomeActivity.this,ActivityMain.class);10elseintent = new Intent(WelcomeActivity.this, Ges
21、tureVerifyActivity.class);intent.putExtra(from_activity, 0);startActivity(intent);finish();, 2000);關于引導界面滑動事件代碼:Overridepublic boolean onTouch(View v, MotionEvent event) switch (event.getAction() case MotionEvent.ACTION_DOWN: / 手指按下的 X 坐標downX = event.getX();break;case MotionEvent.ACTION_UP: float l
22、astX = event.getX();/ 抬起的時候的 X 坐標大于按下的時候就顯示上一張圖片if (lastX downX) if (currentPosition 0) / 設置動畫,mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation( getApplication(), R.anim.left_in);mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation( getApplication(), R.anim.right_out);currentPositio
23、n-;mImageSwitcher.setImageResource(imgIdscurrentPosition% imgIds.length);setImageBackground(currentPosition); else Toast.makeText(getApplication(), 向右滑動, Toast.LENGTH_SHORT).show();if (lastX downX) 11if (currentPosition imgIds.length - 1) mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(ge
24、tApplication(), R.anim.right_in);mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(getApplication(), R.anim.left_out);currentPosition+;mImageSwitcher.setImageResource(imgIdscurrentPosition);setImageBackground(currentPosition); else Intent intent = new Intent(GuideMain.this, ActivityMain.cl
25、ass);startActivity(intent);finish();break;return true;通過 xml 設置引導頁面動畫,代碼如下(以向左滑動為例): 3.23.2 主界面功能描述主界面功能描述圖 7 所示是軟件的主頁面,這是一個通過 TabHost 標簽組件來實現的一個分類管理功能。本界面的標簽在屏幕的最下方,分別是文件管理、我的書架、我的設置。點擊不同的標簽則顯示不同的界面,默認顯示標簽為我的書架,打開選項中會出現對應的視圖。實現了將本程序關聯(lián)成手機默認打開程序中,即從外部打開文本文件時選擇查看方式中會出現本軟件圖標供用戶選擇以本軟件打開。12圖 7 軟件主界面初始化選項
26、卡代碼如下:private void initTabs() myTabHost = (TabHost) findViewById(R.id.TabHost1);myTabHost.setup(this.getLocalActivityManager();/添加文件管理選項myTabHost.addTab(myTabHost.newTabSpec(tab_file).setIndicator(composeLayout(文件管理, R.drawable.folders).setContent(new Intent(this, FileExplorerActivity.class).addFlag
27、s(Intent.FLAG_ACTIVITY_CLEAR_TOP);/添加我的書架選項myTabHost.addTab(myTabHost.newTabSpec(tab_books).setIndicator(composeLayout(我的書架, R.drawable.books).setContent(new Intent(this, BookShelf.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);13/添加我的設置選項myTabHost.addTab(myTabHost.newTabSpec(tab_setting).setIndica
28、tor(composeLayout(我的設置, R.drawable.setting).setContent(new Intent(this, MySetting.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);myTabHost.setCurrentTab(1);myTabHost.setOnTabChangedListener(new OnTabChangedListener();updateTab(myTabHost);將程序關聯(lián)成 Android 系統(tǒng)默認打開程序代碼: 接收從外部傳來的參數并處理的代碼:Intent intent = g
29、etIntent();String action = intent.getAction();if (intent.ACTION_VIEW.equals(action) String res_path = ;try res_path = URLDecoder.decode(intent.getDataString(), utf8); catch (UnsupportedEncodingException e) e.printStackTrace();3.33.3 書籍管理模塊功能描述書籍管理模塊功能描述圖 8 所示是書籍管理主頁面,最上面標題欄有導航按鈕和書籍選擇按鈕。當點擊導航按鈕時會從左側彈
30、出導航欄如圖 9 所示,并把書籍從每行顯示三個調整到每行顯示兩個。當點擊導航里的按鈕時會顯示子功能導航,當再點擊其14它按鈕時,會收起前面的子功能導航,展開當前的子功能。當單擊書籍選擇按鈕時會彈出書籍選擇窗口,選擇里面的書架則進入相應的書架界面,同時還可以通過左右滑動來切換書架界面。當單擊書籍時會打開相應的書籍閱讀界面,長按某書籍時會彈出書籍操作窗口如圖 10 所示,書籍操作窗口中有刪除閱讀記錄、刪除閱讀記錄和文件、移動到歷史書架、移動到收藏書籍、查看書籍詳情和分享本書,不同書架中的操作項略有不同。 圖 8 書架效果頁面圖 9 導航欄頁面 圖 10 書籍操作窗口初始化 ViewPager 的核
31、心代碼如下:private void InitViewPager() mPager = (ViewPager) findViewById(R.id.vPager);listViews = new ArrayList();Intent intent = new Intent(BookShelf.this, BookShelfActivity.class);intent.putExtra(book_shelf, MyConstant.BOOKS_RECENTLY);listViews.add(getView(BookShelfRecently, intent);Intent intent2=new
32、 Intent(BookShelf.this, BookShelfActivity.class);intent2.putExtra(book_shelf, MyConstant.BOOKS_HISTORY);listViews.add(getView(BookShelfHistory, intent2);Intent intent3=new Intent(BookShelf.this, BookShelfActivity.class);intent3.putExtra(book_shelf, MyConstant.BOOKS_COLLECT);listViews.add(getView(Boo
33、kShelfCollect, intent3);adapter = new MyPagerAdapter(listViews);mPager.setAdapter(adapter);mPager.setCurrentItem(0);mPager.setOnPageChangeListener(new MyOnPageChangeListener();15單擊書籍跳轉至閱讀頁面進行閱讀代碼如下:private void goReadActivity(BookInfo tem) if(new File(tem.bookPath).exists() Intent intent = new Inten
34、t(BookShelfActivity.this, ReaderActivity.class);bundle = new 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); startActivity(int
35、ent); elsebooksTableOperate.delete(tem.bookId);adapter.notifyDataSetChanged();Toast.makeText(BookShelfActivity.this, 書籍文件不存在,移除記錄, Toast.LENGTH_SHORT).show();書籍排序的核心代碼(以按時間排序為例):SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try long time1 = format.parse(book1.lastRead).getTime(
36、);long time2 = format.parse(book2.lastRead).getTime();if (time1 time2) return -1; else return book1.bookNpareToIgnoreCase(book2.bookName); catch (ParseException e) e.printStackTrace();分享本書的代碼如下:Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXT
37、RA_TEXT, +16selectBook.bookName+這本書還不錯,分享給大家看看!); sendIntent.setType(text/plain); startActivity(sendIntent);點擊添加書籍中的快速掃描按鈕,進入此界面開始掃描,通過自定義文件名過濾類來進行搜索并顯示正在掃描界面,其中有掃描到的文件數目如圖 11 所示。掃描完成后使用 ListView 組件顯示掃描結果,最上面標題欄有返回按鈕、我的書籍標題、重新掃描按鈕。當長按某文件時則切換到多選模式如圖 12 所示,最上面標題欄改變?yōu)闃擞浫堪粹o、選中的文件數目顯示、加入書架按鈕、取消按鈕。多選模式下可以
38、點擊文件進行逐個選擇,也可進行全選和取消全選操作。當用戶選擇是標題欄上會有對應的已選文件個數顯示。選好之后點擊加入書架將會把選中的文件加入最近書架中,也可以點擊取消則取消多選模式。圖 11 正在掃描圖 12 多選模式時時顯示掃描到的文件個數部分代碼:Handler handler = new Handler() public void handleMessage(Message msg) if (msg.what != -1) numText.setText( + msg.what);17 else listData = listTem;ll.setVisibility(View.GONE);
39、super.handleMessage(msg);class UpdataBooks extends Thread Overridepublic void run() handler.sendEmptyMessage(1);getAllFiles(file);handler.sendEmptyMessage(-1);掃描文本文件部分代碼:public void getAllFiles(File root) File files = root.listFiles(new MyFileFilter(false,txt);if (files != null) for (File f : files)
40、 if (f.isDirectory() getAllFiles(f); else if ( f.length() 1024 * 100) Map tem = new HashMap();tem.put(fileName, f.getName();tem.put(filePath, f.getAbsolutePath();tem.put(fileSize, getFileSize(f.length();num+;handler.sendEmptyMessage(num);listTem.add(tem);isSelect.add(false);3.43.4 文件瀏覽模塊功能描述文件瀏覽模塊功能
41、描述下面是文件瀏覽模塊主頁面,使用 ListView 組件顯示文件目錄,不同的文件類型顯示不同的圖標如圖 13 所示。最上面標題欄有導航按鈕,當點擊導航按鈕時會從左側彈出導航欄如圖 14 所示,導航欄中有標記文件按鈕、分類排序按18鈕和添加到書架按鈕,點擊標記文件按鈕或長按某文件或目錄時則切換到多選模式,其中有多選按鈕、反選按鈕和取消按鈕;點擊分類排序則彈出子菜單,其中有按名稱排序、按大小排序、按時間排序和按類型排序;點擊添加到書架時如果為選擇文件則自動進入多選模式讓用戶進行文件選擇,如果用戶未選擇則提示“請選擇書籍” ,進行選擇是用戶可選擇文件或目錄,系統(tǒng)會自動進行掃描,把符合要求的文件添加
42、到“最近書架”中,并彈出提示信息,其中有失敗個數、已存在個數和成功個數。在多選模式下點擊返回按鈕或點擊標記文件會取消多選模式。非多選模式下,用戶點擊文件時本軟件會根據文件擴展名來判斷打開文件方式如圖 15 所示,如果是文本文件則直接用本軟件打開,并把其添加到“最近書架”中,其它格式則調用對應的軟件打開,如果是未識別的類型則提示“沒有打開此文件的應用” 。 圖 13 文件瀏覽頁面圖 14 文件瀏覽導航欄圖 15 打開視頻文件文件路徑導航實現代碼:public void navigationBar() String strPath = null;try strPath = currentParen
43、t.getCanonicalPath().split(/); catch (IOException e1) e1.printStackTrace();tvpath.removeAllViews();for (int i = 1; i 1) if (i = 2) imageText.setPadding(10, 0, 20, 0);imageText.setText(存儲器); else imageText.setPadding(10, 0, 20, 0);imageText.setText(strPathi);if (i = strPath.length - 1) linyou.setBack
44、groundResource(R.drawable.rights_); else linyou.setBackgroundResource(R.drawable.middle);linyou.setOnClickListener(new imageTextListener(i,strPath.length, strPath);frameLayout.addView(linyou);frameLayout.addView(imageText);tvpath.addView(frameLayout);不同類型文件打開方式的核心代碼如下:private void OpenPhoto(String w
45、ork_answer) Intent intent = null;final String res_path = work_answer;String suffixName=res_path.substring(res_path.lastIndexOf(.)+ 1).toLowerCase();if (!new File(res_path).exists() Toast.makeText(this, suffixName + 資源不存在,Toast.LENGTH_SHORT).show(); else /選擇打開方式if (doc.equals(suffixName) | docx.equal
46、s(suffixName) intent = Utils.getWordFileIntent(res_path);else if (ppt.equals(suffixName)|pptx.equals(suffixName)intent = Utils.getPptFileIntent(res_path);else if (xls.equals(suffixName)|xlsx.equals(suffixName)intent = Utils.getExcelFileIntent(res_path); else if (jpg.equals(suffixName) | png.equals(s
47、uffixName)20|gif.equals(suffixName)|bmp.equals(suffixName) intent = Utils.getImageFileIntent(res_path); else if (pdf.equals(suffixName) intent = Utils.getPdfFileIntent(res_path); else if (mp3.equals(suffixName) intent = Utils.getAudioFileIntent(res_path); else if (html.equals(suffixName) intent = Ut
48、ils.getHtmlFileIntent(res_path); else if (chm.equals(suffixName) intent = Utils.getChmFileIntent(res_path); else if (mp4.equals(suffixName) | 3gp.equals(suffixName)|wmv.equals(suffixName)|flv.equals(suffixName)|rmvb.equals(suffixName)|avi.equals(suffixName)intent = Utils.getVideoFileIntent(res_path)
49、; else if (txt.equals(suffixName) /設置文本打開方式為當前應用int p1 = res_path.lastIndexOf(/);int p2 = res_path.lastIndexOf(.);long mFileSize = new File(res_path).length();BookDatabaseHelper helper = new BookDatabaseHelper(FileExplorerActivity.this);SQLiteDatabase db = helper.getWritableDatabase();BooksTableOper
50、ate booksTableOperate = new BooksTableOperate(db);booksTableOperate.insert(res_path.substring(p1 + 1, p2),res_path, getFileSize(mFileSize);ActivityMain.myTabHost.setCurrentTab(1);helper = new BookDatabaseHelper(FileExplorerActivity.this);db = helper.getWritableDatabase();booksTableOperate = new Book
51、sTableOperate(db);BookInfo book = booksTableOperate.getBook(res_path);Intent it = new Intent(FileExplorerActivity.this,ReaderActivity.class);Bundle bundle = new Bundle();bundle.putInt(id, book.bookId);bundle.putString(name, book.bookName);bundle.putString(path, res_path);bundle.putInt(pos, book.pos)
52、;it.putExtras(bundle);startActivity(it);db.close();return; else if (apk.equals(suffixName) 21intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(new File(suffixName),application/vnd.android.package-archive);startActivity(intent); else Toast.makeText(this, 不支持 + suffixName + 文件
53、格式, Toast.LENGTH_SHORT).show();try this.startActivity(intent); catch (Exception e) Toast.makeText(this, 沒有打開此文件的應用, Toast.LENGTH_SHORT).show();e.printStackTrace();3.53.5 閱讀管理模塊功能描述閱讀管理模塊功能描述圖 16 所示是電子書閱讀主要頁面,本頁面通過自定義一個 View 視圖來顯示書頁,通過自定義類來讀取文本內容并通過 onDraw()方法把文件名、文本內容、電量信息、時間信息和已讀百分比進行繪制成圖片,并通過 View
54、 來把繪制的圖片顯示出來。第一次進入閱讀頁面是會有顯示引導頁面來指導用戶如何讀本頁面進行操作如圖 17 所示。本頁面操作包括點擊事件和滑動事件,點擊左側屏幕進行向上翻頁,點擊右側屏幕進行向下翻頁,點擊屏幕中間畫出菜單選項如圖 18 所示。 22 圖 16 閱讀引導界面 圖 17 閱讀引導頁面 圖 18 閱讀菜單此菜單是使用 PopupWindow 組件實現,菜單分上下兩部分,上面的菜單有返回按鈕、屏幕亮度調節(jié)按鈕和添加書簽按鈕;下面的菜單有主題選擇按鈕、搜索按鈕、書簽按鈕、目錄按鈕、字體大小調節(jié)按鈕、翻頁方式按鈕、夜間模式切換按鈕和退出軟件按鈕。點擊主題選擇按鈕彈出主題選擇窗口如圖 19 所示
55、,此選項共設置了 9 種主題供用戶選擇,當用戶選擇了主題閱讀頁面會自動改變?yōu)楫斍斑x擇的主題樣式;點擊屏幕亮度調節(jié)按鈕彈出屏幕亮度設置窗口如圖 20所示,拖動屏幕亮度調節(jié)條屏幕亮度會隨著用戶的拖動而即時改變;點擊翻頁方式按鈕彈出翻頁方式設置窗口如圖 21 所示,此設置中共有三個按鈕代表了三種翻頁方式。 圖 19 閱讀主題選擇 圖 20 屏幕亮度設置圖 21 翻頁方式設置第一次進入閱讀界面顯示引導頁面的核心代碼實現為:if(share.getBoolean(is_first, true)firstDialog();edit.putBoolean(is_first, false);mit();實現休
56、息提醒和空閑退出代碼:SuppressLint(HandlerLeak)Handler mTimeHandler = new Handler() public void handleMessage(Message msg) if (msg.what = 1) xiuxiDialog();23if (msg.what = 2) SysApplication.getInstance().exit();super.handleMessage(msg);對應屏幕事件處理的核心代碼實現為:Overridepublic boolean onTouch(View v, MotionEvent e) mKXc
57、ont = 0;if (e.getAction() = MotionEvent.ACTION_DOWN) /手指按下時xd = e.getX();yd = e.getY();if (yd mHeightPixels * 0.35 & yd mWidthPixels * 0.25 & xd mWidthPixels / 2 & bool)Toast.makeText(ReaderActivity.this, 已經到最后一頁了,Toast.LENGTH_SHORT).show(); else if (e.getAction() = MotionEvent.ACTION_MOVE) /移動時x =
58、e.getX();y = e.getY();if (Math.abs(xd - x) 10 | Math.abs(yd - y) 10)bool = true; else if (e.getAction() = MotionEvent.ACTION_UP) /離開屏幕時xu = e.getX();yu = e.getY();if (!bool & Math.abs(xd - xu) 10 & Math.abs(yd - yu) 10) popupWindow.showAtLocation(mPageWidget, 0, 0, 0);if (bool) boolean ret = false;i
59、f (v = mPageWidget) if (e.getAction() = MotionEvent.ACTION_DOWN) mPageWidget.calcCornerXY(e.getX(), e.getY();pagefactory.onDraw(mCurPageCanvas);24if (mPageWidget.DragToRight() try pagefactory.prePage(); catch (IOException e1) e1.printStackTrace();if (pagefactory.isfirstPage()return false;pagefactory
60、.onDraw(mNextPageCanvas); else try pagefactory.nextPage(); catch (IOException e1) e1.printStackTrace();if (pagefactory.islastPage()return false;pagefactory.onDraw(mNextPageCanvas);pos = pagefactory.getBugBegin();booksTable.updata(bookId, pos,pagefactory.getFPercent();mPageWidget.setBitmaps(mCurPageB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋買賣雙方產權登記及過戶手續(xù)協(xié)議
- 車輛過戶手續(xù)代理及車輛購置協(xié)議
- 書寫展示活動方案
- 醫(yī)院放射人員管理制度
- 小型公司工作管理制度
- 單位公司公章管理制度
- 印刷行業(yè)衛(wèi)生管理制度
- 基層廣播播放管理制度
- 學校假期國旗管理制度
- 公司紀律衛(wèi)生管理制度
- 2025中考數學復習專題:八類最值問題匯-總(瓜豆隱圓胡不歸阿氏圓將軍飲馬逆等線費馬點構造二次函數求最值)(原卷版)
- 農村煤改電工程施工設計方案
- 2025年鄭州鐵路局招聘筆試參考題庫含答案解析
- 公司駕駛員安全培訓內容
- 安全生產應急培訓課程
- 2024年大型主題公園設計與施工合同
- 《基督教概論》課件
- 污水處理廠安全生產培訓
- 婦科藥品管理
- 【MOOC】電路分析基礎-北京科技大學 中國大學慕課MOOC答案
評論
0/150
提交評論