版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、XXX大學(xué)移動(dòng)互聯(lián)網(wǎng)開(kāi)發(fā)技術(shù)大作業(yè)報(bào)告 題 目: 電子書(shū)APP-書(shū)屋 學(xué)生姓名: 學(xué) 號(hào): 學(xué) 院: 專業(yè)班級(jí): 完成日期: 2020年 10 月 20 日成績(jī)(百分制): 授課教師: 目錄目錄21功能描述11.1總體界面11.2書(shū)架模塊21.2.1顯示目錄31.2.2設(shè)置主題31.2.3設(shè)置翻頁(yè)效果41.2.4設(shè)置字體樣式41.2.5調(diào)節(jié)字體大小51.2.6設(shè)置字體顏色61.2.7添加書(shū)簽61.2.8顯示書(shū)簽列表71.2.9清空書(shū)簽列表71.3用戶模塊81.3.1用戶注冊(cè)81.3.2用戶登錄92程序結(jié)構(gòu)102.1整個(gè)工程包含的所有JAVA文件102.2整個(gè)工程包含的所有布局文件113詳細(xì)設(shè)計(jì)
2、123.1主模塊設(shè)計(jì)123.1.1主模塊流程圖123.1.2主模塊關(guān)鍵代碼123.2書(shū)架模塊設(shè)計(jì)133.2.1書(shū)架模塊流程圖133.2.2書(shū)架模塊關(guān)鍵代碼133.3用戶模塊設(shè)計(jì)173.1.1用戶模塊流程圖173.1.2用戶模塊關(guān)鍵代碼183.4數(shù)據(jù)庫(kù)設(shè)計(jì)204運(yùn)行效果225總結(jié)301 功能描述這款電子書(shū)APP主要有三個(gè)大模塊,我的、書(shū)城、書(shū)架。分別的功能是用戶中心,網(wǎng)上書(shū)城,我的書(shū)架。APP截圖:圖1.1 電子書(shū)APP運(yùn)行在手機(jī)上的效果1.1 總體界面書(shū)城:可閱讀網(wǎng)上的電子書(shū)圖1.2 APP整體樣式1.2 書(shū)架模塊點(diǎn)擊書(shū)架跳轉(zhuǎn)到書(shū)架,初始界面有很多本地電子書(shū)圖1.3 書(shū)架界面打開(kāi)任意一本電子書(shū)
3、,所具有的功能:主要有 目錄、設(shè)置、字體、書(shū)簽幾個(gè)模塊圖1.4 電子書(shū)界面1.2.1顯示目錄點(diǎn)擊目錄按鈕,顯示目錄。點(diǎn)擊目錄可跳轉(zhuǎn)到對(duì)應(yīng)章節(jié)圖1.5 電子書(shū)的目錄顯示1.2.2設(shè)置主題點(diǎn)擊設(shè)置按鈕里面有四種主題樣式,點(diǎn)擊可更換主題。點(diǎn)擊護(hù)眼主題查看效果顏色換成了偏綠色,點(diǎn)擊夜間主題顏色就會(huì)換成黑色,對(duì)應(yīng)主題都會(huì)有對(duì)應(yīng)樣式。圖1.6 更改閱讀主題1.2.3設(shè)置翻頁(yè)效果點(diǎn)擊設(shè)置按鈕,顯示翻頁(yè)效果的設(shè)置,這里有三種翻頁(yè)效果的設(shè)置分別是,仿真翻頁(yè)、覆蓋翻頁(yè)、無(wú)效果。選擇仿真翻頁(yè)查看效果。仿真翻頁(yè)的效果就類似真實(shí)翻書(shū)的翻頁(yè)的效果。圖1.7 更改翻頁(yè)效果1.2.4設(shè)置字體樣式點(diǎn)擊字體按鈕,可以更改顯示的字
4、體樣式,顯示現(xiàn)在使用的是默認(rèn)字體。我們可以點(diǎn)擊其他字體。圖1.8 字體樣式點(diǎn)擊切換字體樣式使用幼圓字體,查看顯示效果和默認(rèn)字體不一樣圖1.9 更改字體樣式1.2.5調(diào)節(jié)字體大小點(diǎn)擊設(shè)置按鈕,顯示設(shè)置字體大小的功能,拖動(dòng)設(shè)置字體的字體條來(lái)改變字體的大小,現(xiàn)在是拖到了最大。圖1.10 調(diào)節(jié)字體大小1.2.6設(shè)置字體顏色點(diǎn)擊字體按鈕,看到有設(shè)置字體顏色選擇藍(lán)色樣式,查看效果字體顏色變成了藍(lán)色。圖1.11 更改字體顏色1.2.7添加書(shū)簽點(diǎn)擊書(shū)簽按鈕,給當(dāng)前閱讀也添加書(shū)簽圖1.12 添加書(shū)簽1.2.8顯示書(shū)簽列表長(zhǎng)按書(shū)簽按鈕,顯示書(shū)簽列表和每個(gè)書(shū)簽添加的時(shí)間,列表里是閱讀是添加的書(shū)簽。圖1.13 查看書(shū)
5、簽列表1.2.9清空書(shū)簽列表長(zhǎng)按書(shū)簽按鈕,點(diǎn)擊書(shū)簽列表的垃圾桶樣式按鈕即可清空書(shū)簽列表,查看效果。圖1.14 清空書(shū)簽列表1.3 用戶模塊點(diǎn)擊用戶按鈕,跳轉(zhuǎn)到用戶模塊。圖1.15 用戶模塊1.3.1用戶注冊(cè)點(diǎn)擊用戶登錄跳轉(zhuǎn)到用戶登錄頁(yè)面,點(diǎn)擊頁(yè)面上的注冊(cè)按鈕注冊(cè)用戶。圖1.16 用戶注冊(cè)1.3.2用戶登錄點(diǎn)擊用戶登錄,用注冊(cè)過(guò)的用戶進(jìn)行登錄。圖1.17 用戶登錄2 程序結(jié)構(gòu)2.1 整個(gè)工程包含的所有JAVA文件圖2.1 整個(gè)工程所有JAVA文件的功能2.2 整個(gè)工程包含的所有布局文件圖2.2 整個(gè)工程所有布局文件3 詳細(xì)設(shè)計(jì)3.1 主模塊設(shè)計(jì)3.1.1主模塊流程圖整體模塊分為三個(gè)模塊,主模塊的
6、功能主要是讓我們可以進(jìn)入不同的模塊,去閱讀線上的電子書(shū)籍。圖3.1 整體模塊流程圖3.1.2主模塊關(guān)鍵代碼Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webView = findViewById(R.id.id_webView); webView.getSettings().setJavaScriptEnabled(true); webView.setW
7、ebViewClient(new WebViewClient(); webView.loadUrl(/); public void doBookrack(View v) Intent intent = new Intent(MainActivity.this,ShelfActivity.class); startActivity(intent); public void doUser(View v) Intent intent = new Intent(MainActivity.this,UserActivity.class); startActivity
8、(intent);3.2 書(shū)架模塊設(shè)計(jì)3.2.1書(shū)架模塊流程圖圖3.2 書(shū)架模塊流程圖3.2.2書(shū)架模塊關(guān)鍵代碼電子書(shū)閱讀顯示Overrideprotected void setScreen() /全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);功能菜單的四個(gè)功能按鈕 Override public void onClick(View v) switch (v.getId() case R.id.button_conte
9、nt: /設(shè)置出現(xiàn)動(dòng)畫(huà)和位置 mContentPopup.setAnimationStyle(R.style.pop_window_anim_style); mContentPopup.showAsDropDown(mBottomBar, 0, -mContentPopup.getHeight(); lightOff(); break; case R.id.button_setting: int xOff = (mBottomBar.getWidth() - mSettingPopup.getWidth() / 2; int yOff = -mSettingPopup.getHeight()
10、- mBottomBar.getHeight() / 6; mSettingPopup.setAnimationStyle(R.style.pop_window_anim_style); mSettingPopup.showAsDropDown(mBottomBar, xOff, yOff); break; case R.id.button_font: mFontPopup.setAnimationStyle(R.style.pop_window_anim_style); mFontPopup.showAsDropDown(mBottomBar, 0, -mFontPopup.getHeigh
11、t(); lightOff(); break; case R.id.button_label: saveLabel(); Toast.makeText(mContext, 書(shū)簽已添加,長(zhǎng)按顯示書(shū)簽列表, Toast.LENGTH_SHORT).show(); break; 書(shū)簽存入數(shù)據(jù)庫(kù) private void saveLabel() Time time = new Time(); time.setToNow(); / 取得系統(tǒng)時(shí)間。 String timeStr = time.year + / + time.month + / + time.monthDay; ReadInfo readI
12、nfo = mBookPageFactory.getReadInfo(); String objectStr = SaveHelper.serObject(readInfo); Label label = new Label(); label.setBookId(mBookId); label.setDetails(mBookPageFactory.getCurContent(); label.setProgress(mBookPageFactory.getPercentStr(); label.setTime(timeStr); label.setPrePageOver(mFlipView.
13、isPrePageOver(); label.setReadInfoStr(objectStr); label.save();目錄功能主要實(shí)現(xiàn)代碼private class ContentsAdapter extends RecyclerView.Adapter private List mBookContents; public ContentsAdapter(List bookContents) mBookContents = bookContents; Override public ContentsHolder onCreateViewHolder(ViewGroup parent,
14、int viewType) LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false); return new ContentsHolder(view); Override public void onBindViewHolder(ContentsHolder holder, int position) holder.bind(mBookContents.get(position)
15、, position); Override public int getItemCount() return mBookContents.size(); public void setBackgroundColor(int color) mLinearLayout.setBackgroundColor(color);設(shè)置功能主要實(shí)現(xiàn)代碼private void setCurThemeBtn() Button usedButton = mThemeBtnsmTheme; for (int i = 0; i mThemeBtns.length; i+) / 設(shè)置背景填充顏色 GradientDra
16、wable drawable = (GradientDrawable) mThemeBtnsi.getBackground(); drawable.setColor(mPopupColorsi); /設(shè)置邊框顏色 if (mThemeBtnsi.getId() = usedButton.getId() int strokeColor = mStrokeColorsi; drawable.setStroke(5, strokeColor); else drawable.setStroke(5, mPopupColorsi); /未選擇button的邊框顏色和填充顏色一致 private void
17、 setCurSeekBarStyle() for (SeekBar seekBar : mSeekBars) /獲取seekBar的layer-list drawable對(duì)象 LayerDrawable layerDrawable = (LayerDrawable) seekBar.getProgressDrawable(); /層次包括背景圖和進(jìn)度,所以進(jìn)度直接設(shè)為1,獲取并設(shè)置進(jìn)度條背景 Drawable drawable = layerDrawable.getDrawable(1); drawable.setColorFilter(mStrokeColorsmTheme, Porter
18、Duff.Mode.SRC); /獲取thumb背景 Drawable thumb = seekBar.getThumb(); thumb.setColorFilter(mStrokeColorsmTheme, PorterDuff.Mode.SRC); 字體功能主要實(shí)現(xiàn)代碼 private void initViews() mTextColors = new int 0xff, /黑 0x8A, /常規(guī) 0xffa9a8a8, /夜間 0xfbe6e3e3, /白 0xff486c94, /藍(lán) ; Override public void onClick(View v) int typeIn
19、dex = mTypeIndex; int color = 0; for (int i = 0; i mButtons.length; i+) if (v.getId() = mButtonsi.getId() typeIndex = i; break; for (int i = 0; i mFabs.length; i+) if (v.getId() = mFabsi.getId() color = mTextColorsi; break; /改變字體 if (typeIndex != mTypeIndex) mTypeIndex = typeIndex; setUsedButton();
20、if (mListener != null) mListener.onTypefaceSelected(mTypeIndex); /改變顏色 if (color != 0) if (mListener != null) mListener.onColorSelected(color); 3.3 用戶模塊設(shè)計(jì)3.1.1用戶模塊流程圖圖3.3 用戶模塊流程圖3.1.2用戶模塊關(guān)鍵代碼用戶管理類方法主要實(shí)現(xiàn)代碼,增加用戶,檢測(cè)用戶 /增加 public boolean insertUser(String name,String password) User user = new User(); us
21、er.setName(name); user.setPassword(password); /創(chuàng)建數(shù)據(jù)庫(kù) LitePal.getDatabase(); return user.save(); /通過(guò)用戶名查找用戶是否存在 public boolean findUserByName(String name) List users = LitePal.findAll(User.class); for(User person: users) if(name.trim().equals(person.getName() return false; return true; /查找密碼是否正確 publ
22、ic boolean findUser(String password) List users = LitePal.findAll(User.class); for(User person: users) if(password.trim().equals(person.getPassword() return false; return true;用戶注冊(cè) private void register_check() if(isUserNameAndPwdValid() boolean flag; String name = mAccount.getText().toString().trim
23、(); String password = mPwd.getText().toString().trim(); String rePassword = mPwdCheck.getText().toString().trim(); flag = userManager.findUserByName(name); if(!flag) Log.d(tag,注冊(cè)失敗); Toast.makeText(this, 用戶名已經(jīng)存在,Toast.LENGTH_SHORT).show(); return ; if(!password.equals(rePassword) Toast.makeText(this
24、, 輸入的密碼不同,Toast.LENGTH_SHORT).show(); return ; else flag=userManager.insertUser(name,password); if(!flag) Toast.makeText(this,注冊(cè)失敗,Toast.LENGTH_LONG).show(); return ; Toast.makeText(this,注冊(cè)成功,Toast.LENGTH_LONG).show(); List people = LitePal.findAll(User.class); for(User person: people) Log.d(Registe
25、rActivity,person name is+person.getName(); Log.d(RegisterActivity,person password is+person.getPassword(); Intent intent_Register_to_Login = new Intent(RegisterActivity.this,LoginActivity.class) ; /切換User Activity至Login Activity startActivity(intent_Register_to_Login); finish(); 用戶登錄 if(isUserNameAn
26、dPwdValid() boolean flag,flag2; / 取得用戶界面輸入 String username = name.getText().toString(); String password = pass.getText().toString(); flag = userManager.findUserByName(username); flag2 = userManager.findUser(password); if(flag) Toast.makeText(this, 該用戶不存在,Toast.LENGTH_SHORT).show(); return ; if(flag2
27、) Toast.makeText(this, 輸入的密碼不正確,Toast.LENGTH_SHORT).show(); return ; /進(jìn)入主界面 Intent intent = new Intent(LoginActivity.this,MainActivity.class); intent.putExtra(username,username); startActivity(intent); finish(); 3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)利用了第三方數(shù)據(jù)庫(kù)框架LitePal,LitePal是一款開(kāi)源的Android數(shù)據(jù)庫(kù)框架采用對(duì)象關(guān)系映射(ORM)模式,將常用的數(shù)據(jù)庫(kù)功能進(jìn)行封裝,可以
28、不用寫一行SQL語(yǔ)句就可以完成創(chuàng)建表、增刪、改、查的操作。實(shí)現(xiàn)過(guò)程(1)添加依賴圖3.4添加數(shù)據(jù)庫(kù)依賴(2)新建assets目錄,然后創(chuàng)建litepal.xml資源文件,用于創(chuàng)建數(shù)據(jù)庫(kù)名稱,數(shù)據(jù)庫(kù)版本、表名、數(shù)據(jù)庫(kù)存放位置圖3.5 數(shù)據(jù)庫(kù)資源文件數(shù)據(jù)庫(kù)資源文件內(nèi)容 數(shù)據(jù)庫(kù)實(shí)體類,用戶實(shí)體類,電子書(shū)實(shí)體類public class User extends LitePalSupport public String name; /用戶名 public String password; /密碼 public User() public class Label extends DataSupport p
29、rivate int mBookId; private String mDetails; private String mProgress; private String mTime; private boolean isPrePageOver;private String readInfoStr; /readInfo對(duì)象序列化編碼后的String 4 運(yùn)行效果打開(kāi)應(yīng)用程序,進(jìn)入主界面查看整體效果首先打開(kāi)APP進(jìn)入引導(dǎo)頁(yè)圖4.1 程序開(kāi)始頁(yè)圖4.2 主頁(yè)面運(yùn)行效果點(diǎn)擊書(shū)架按鈕跳轉(zhuǎn)到書(shū)架頁(yè)面圖4.3 書(shū)架頁(yè)面運(yùn)行效果點(diǎn)擊任意一本電子書(shū)查看運(yùn)行效果圖4.4 電子書(shū)閱讀效果點(diǎn)擊屏幕底部顯示出功能按鈕圖4.5 閱讀時(shí)功能按鈕顯示效果點(diǎn)擊功能按鈕-目錄查看效果4.6 顯示整部電子書(shū)的目錄點(diǎn)擊目錄跳轉(zhuǎn)到第九章,查看效果圖4.7 目錄跳轉(zhuǎn)效果點(diǎn)擊功能按鈕設(shè)置 查看效果
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《大學(xué)生聯(lián)誼晚會(huì)》課件
- 藥物篩選與開(kāi)發(fā)-洞察分析
- 細(xì)節(jié)處理在自動(dòng)駕駛中的應(yīng)用-洞察分析
- 虛擬現(xiàn)實(shí)地理信息平臺(tái)構(gòu)建-洞察分析
- 《服務(wù)器管理技術(shù)》課件
- 無(wú)人駕駛技術(shù)在特殊用途車輛中的應(yīng)用-洞察分析
- 月球巖石地球化學(xué)研究-洞察分析
- 元宇宙社交互動(dòng)模式-洞察分析
- 替卡西林藥效學(xué)研究-洞察分析
- 異常檢測(cè)的深度學(xué)習(xí)模型優(yōu)化-洞察分析
- TSG R5002-2013 壓力容器使用管理規(guī)則
- 信用卡中心委外催收 投標(biāo)方案(技術(shù)方案)
- MOOC 天氣學(xué)-國(guó)防科技大學(xué) 中國(guó)大學(xué)慕課答案
- 《旅游財(cái)務(wù)管理》課件-2財(cái)務(wù)管理及其目標(biāo)
- 汽車品牌文化(吉林聯(lián)盟)智慧樹(shù)知到期末考試答案2024年
- 基于ECharts的數(shù)據(jù)可視化應(yīng)用
- 海洋學(xué)海上實(shí)踐教學(xué)智慧樹(shù)知到期末考試答案2024年
- JTJ034-2000 公路路面基層施工技術(shù)規(guī)范
- 2023年4月自考00243民事訴訟法學(xué)試題及答案
- 戰(zhàn)場(chǎng)防護(hù)基本知識(shí)課件
- EPC工程總承包項(xiàng)目項(xiàng)目管理要點(diǎn)
評(píng)論
0/150
提交評(píng)論