版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XXX大学移动互联网开发技术大作业报告 题 目: 电子书APP-书屋 学生姓名: 学 号: 学 院: 专业班级: 完成日期: 2020年 10 月 20 日成绩(百分制): 授课教师: 目录目录21功能描述11.1总体界面11.2书架模块21.2.1显示目录31.2.2设置主题31.2.3设置翻页效果41.2.4设置字体样式41.2.5调节字体大小51.2.6设置字体颜色61.2.7添加书签61.2.8显示书签列表71.2.9清空书签列表71.3用户模块81.3.1用户注册81.3.2用户登录92程序结构102.1整个工程包含的所有JAVA文件102.2整个工程包含的所有布局文件113详细设计
2、123.1主模块设计123.1.1主模块流程图123.1.2主模块关键代码123.2书架模块设计133.2.1书架模块流程图133.2.2书架模块关键代码133.3用户模块设计173.1.1用户模块流程图173.1.2用户模块关键代码183.4数据库设计204运行效果225总结301 功能描述这款电子书APP主要有三个大模块,我的、书城、书架。分别的功能是用户中心,网上书城,我的书架。APP截图:图1.1 电子书APP运行在手机上的效果1.1 总体界面书城:可阅读网上的电子书图1.2 APP整体样式1.2 书架模块点击书架跳转到书架,初始界面有很多本地电子书图1.3 书架界面打开任意一本电子书
3、,所具有的功能:主要有 目录、设置、字体、书签几个模块图1.4 电子书界面1.2.1显示目录点击目录按钮,显示目录。点击目录可跳转到对应章节图1.5 电子书的目录显示1.2.2设置主题点击设置按钮里面有四种主题样式,点击可更换主题。点击护眼主题查看效果颜色换成了偏绿色,点击夜间主题颜色就会换成黑色,对应主题都会有对应样式。图1.6 更改阅读主题1.2.3设置翻页效果点击设置按钮,显示翻页效果的设置,这里有三种翻页效果的设置分别是,仿真翻页、覆盖翻页、无效果。选择仿真翻页查看效果。仿真翻页的效果就类似真实翻书的翻页的效果。图1.7 更改翻页效果1.2.4设置字体样式点击字体按钮,可以更改显示的字
4、体样式,显示现在使用的是默认字体。我们可以点击其他字体。图1.8 字体样式点击切换字体样式使用幼圆字体,查看显示效果和默认字体不一样图1.9 更改字体样式1.2.5调节字体大小点击设置按钮,显示设置字体大小的功能,拖动设置字体的字体条来改变字体的大小,现在是拖到了最大。图1.10 调节字体大小1.2.6设置字体颜色点击字体按钮,看到有设置字体颜色选择蓝色样式,查看效果字体颜色变成了蓝色。图1.11 更改字体颜色1.2.7添加书签点击书签按钮,给当前阅读也添加书签图1.12 添加书签1.2.8显示书签列表长按书签按钮,显示书签列表和每个书签添加的时间,列表里是阅读是添加的书签。图1.13 查看书
5、签列表1.2.9清空书签列表长按书签按钮,点击书签列表的垃圾桶样式按钮即可清空书签列表,查看效果。图1.14 清空书签列表1.3 用户模块点击用户按钮,跳转到用户模块。图1.15 用户模块1.3.1用户注册点击用户登录跳转到用户登录页面,点击页面上的注册按钮注册用户。图1.16 用户注册1.3.2用户登录点击用户登录,用注册过的用户进行登录。图1.17 用户登录2 程序结构2.1 整个工程包含的所有JAVA文件图2.1 整个工程所有JAVA文件的功能2.2 整个工程包含的所有布局文件图2.2 整个工程所有布局文件3 详细设计3.1 主模块设计3.1.1主模块流程图整体模块分为三个模块,主模块的
6、功能主要是让我们可以进入不同的模块,去阅读线上的电子书籍。图3.1 整体模块流程图3.1.2主模块关键代码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 书架模块设计3.2.1书架模块流程图图3.2 书架模块流程图3.2.2书架模块关键代码电子书阅读显示Overrideprotected void setScreen() /全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);功能菜单的四个功能按钮 Override public void onClick(View v) switch (v.getId() case R.id.button_conte
9、nt: /设置出现动画和位置 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, 书签已添加,长按显示书签列表, Toast.LENGTH_SHORT).show(); break; 书签存入数据库 private void saveLabel() Time time = new Time(); time.setToNow(); / 取得系统时间。 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();目录功能主要实现代码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);设置功能主要实现代码private void setCurThemeBtn() Button usedButton = mThemeBtnsmTheme; for (int i = 0; i mThemeBtns.length; i+) / 设置背景填充颜色 GradientDra
16、wable drawable = (GradientDrawable) mThemeBtnsi.getBackground(); drawable.setColor(mPopupColorsi); /设置边框颜色 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对象 LayerDrawable layerDrawable = (LayerDrawable) seekBar.getProgressDrawable(); /层次包括背景图和进度,所以进度直接设为1,获取并设置进度条背景 Drawable drawable = layerDrawable.getDrawable(1); drawable.setColorFilter(mStrokeColorsmTheme, Porter
18、Duff.Mode.SRC); /获取thumb背景 Drawable thumb = seekBar.getThumb(); thumb.setColorFilter(mStrokeColorsmTheme, PorterDuff.Mode.SRC); 字体功能主要实现代码 private void initViews() mTextColors = new int 0xff, /黑 0x8A, /常规 0xffa9a8a8, /夜间 0xfbe6e3e3, /白 0xff486c94, /蓝 ; 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 用户模块设计3.1.1用户模块流程图图3.3 用户模块流程图3.1.2用户模块关键代码用户管理类方法主要实现代码,增加用户,检测用户 /增加 public boolean insertUser(String name,String password) User user = new User(); us
21、er.setName(name); user.setPassword(password); /创建数据库 LitePal.getDatabase(); return user.save(); /通过用户名查找用户是否存在 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;用户注册 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,注册失败); Toast.makeText(this, 用户名已经存在,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,注册失败,Toast.LENGTH_LONG).show(); return ; Toast.makeText(this,注册成功,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 ; /进入主界面 Intent intent = new Intent(LoginActivity.this,MainActivity.class); intent.putExtra(username,username); startActivity(intent); finish(); 3.4 数据库设计数据库利用了第三方数据库框架LitePal,LitePal是一款开源的Android数据库框架采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以
28、不用写一行SQL语句就可以完成创建表、增删、改、查的操作。实现过程(1)添加依赖图3.4添加数据库依赖(2)新建assets目录,然后创建litepal.xml资源文件,用于创建数据库名称,数据库版本、表名、数据库存放位置图3.5 数据库资源文件数据库资源文件内容 数据库实体类,用户实体类,电子书实体类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对象序列化编码后的String 4 运行效果打开应用程序,进入主界面查看整体效果首先打开APP进入引导页图4.1 程序开始页图4.2 主页面运行效果点击书架按钮跳转到书架页面图4.3 书架页面运行效果点击任意一本电子书查看运行效果图4.4 电子书阅读效果点击屏幕底部显示出功能按钮图4.5 阅读时功能按钮显示效果点击功能按钮-目录查看效果4.6 显示整部电子书的目录点击目录跳转到第九章,查看效果图4.7 目录跳转效果点击功能按钮设置 查看效果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工作总结之仿真实习总结报告
- 2023年环保特种电线电缆投资申请报告
- 银行内部资金调拨制度
- 部编版小学一年级语文阅读练习题四十篇+全册练习题+全册《识字表》生字带拼音三词
- 热力管道施工合同
- 陕西省汉中市宁强县2023-2024学年八年级上学期期末学业水平检测数学试卷(含解析)
- 《保护珍稀野生动物》课件
- 反腐倡廉课件
- 广东省阳东广雅学校2025届高三第二次诊断性检测语文试卷含解析
- 湖南省汨罗市2025届高三3月份模拟考试英语试题含解析
- 理论力学全部教程通用课件
- 《微积分基础》大作业
- 康复科2024年度工作计划创新与改革
- 建筑工程施工质量样板引路工作指引
- 2024苹果VisionPro技术拆解
- 武术比赛策划方案
- 风电场项目施工进度计划及保证措施
- 儿童友好空间图解设计全书
- 交通运输的大数据应用与分析
- 甘肃省临夏回民中学2023-2024学年高一上学期期末考试语文试题
- 肺结节的诊断和治疗方法
评论
0/150
提交评论