《《移动互联网开发技术》大作业报告.pdf》由会员分享,可在线阅读,更多相关《《移动互联网开发技术》大作业报告.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、XXXXXX 大学大学移动互联网开发技术大作业报告移动互联网开发技术大作业报告题目:电子书 APP-书屋学生姓名:学号:学院:专业班级:完成日期:2020 年 10 月 20 日成绩(百分制):授课教师:I目录目录.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整个
2、工程包含的所有JAVA 文件.102.2整个工程包含的所有布局文件.113详细设计.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总结.30I1功能描述这款电子书 APP 主要有三个大模块,我的、书城、书架。分别的功能是用户中心,网上书城,我的书架。APP 截图:图 1.1 电子书 APP 运行在手机上的效果1.1总体界面书城:可阅读网
3、上的电子书图 1.2 APP整体样式11.2书架模块点击书架跳转到书架,初始界面有很多本地电子书图 1.3 书架界面打开任意一本电子书,所具有的功能:主要有 目录、设置、字体、书签几个模块图 1.4 电子书界面21.2.1 显示目录点击目录按钮,显示目录。点击目录可跳转到对应章节图 1.5 电子书的目录显示1.2.2 设置主题点击设置按钮里面有四种主题样式,点击可更换主题。点击护眼主题查看效果颜色换成了偏绿色,点击夜间主题颜色就会换成黑色,对应主题都会有对应样式。图 1.6 更改阅读主题31.2.3 设置翻页效果点击设置按钮,显示翻页效果的设置,这里有三种翻页效果的设置分别是,仿真翻页、覆盖翻
4、页、无效果。选择仿真翻页查看效果。仿真翻页的效果就类似真实翻书的翻页的效果。图 1.7 更改翻页效果1.2.4 设置字体样式点击字体按钮,可以更改显示的字体样式,显示现在使用的是默认字体。我们可以点击其他字体。图 1.8 字体样式4点击切换字体样式使用幼圆字体,查看显示效果和默认字体不一样图 1.9 更改字体样式1.2.5 调节字体大小点击设置按钮,显示设置字体大小的功能,拖动设置字体的字体条来改变字体的大小,现在是拖到了最大。图 1.10 调节字体大小51.2.6 设置字体颜色点击字体按钮,看到有设置字体颜色选择蓝色样式,查看效果字体颜色变成了蓝色。图 1.11 更改字体颜色1.2.7 添加
5、书签点击书签按钮,给当前阅读也添加书签图 1.12 添加书签61.2.8 显示书签列表长按书签按钮,显示书签列表和每个书签添加的时间,列表里是阅读是添加的书签。图 1.13 查看书签列表1.2.9 清空书签列表长按书签按钮,点击书签列表的垃圾桶样式按钮即可清空书签列表,查看效果。图 1.14 清空书签列表71.3用户模块点击用户按钮,跳转到用户模块。图 1.15 用户模块1.3.1 用户注册点击用户登录跳转到用户登录页面,点击页面上的注册按钮注册用户。8图 1.16 用户注册1.3.2 用户登录点击用户登录,用注册过的用户进行登录。图 1.17 用户登录92程序结构2.1整个工程包含的所有 J
6、AVA文件图 2.1 整个工程所有 JAVA 文件的功能102.2整个工程包含的所有布局文件图 2.2 整个工程所有布局文件113详细设计3.1主模块设计3.1.1 主模块流程图整体模块分为三个模块,主模块的功能主要是让我们可以进入不同的模块,去阅读线上的电子书籍。图 3.1 整体模块流程图3.1.2 主模块关键代码Overrideprotected void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WebView w
7、ebView=findViewById(R.id.id_webView);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient();webView.loadUrl(http:/ void doBookrack(View v)Intent intent=new Intent(MainActivity.this,ShelfActivity.class);startActivity(intent);public void doUser(View v)Intent inte
8、nt=new Intent(MainActivity.this,UserActivity.class);startActivity(intent);123.2书架模块设计3.2.1 书架模块流程图图 3.2 书架模块流程图3.2.2 书架模块关键代码电子书阅读显示Overrideprotected void setScreen()/全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);功能菜单的四个功能按钮Overridepubl
9、ic void onClick(View v)switch(v.getId()case R.id.button_content:13/设置出现动画和位置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.getW
10、idth()/2;int yOff=-mSettingPopup.getHeight()-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(mB
11、ottomBar,0,-mFontPopup.getHeight();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 re
12、adInfo=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.isPrePageO
13、ver();label.setReadInfoStr(objectStr);label.save();14目录功能主要实现代码private class ContentsAdapter extends RecyclerView.Adapter private List mBookContents;public ContentsAdapter(List bookContents)mBookContents=bookContents;Overridepublic ContentsHolder onCreateViewHolder(ViewGroup parent,int viewType)Layo
14、utInflater inflater=LayoutInflater.from(mContext);View view=inflater.inflate(android.R.layout.simple_list_item_1,parent,false);return new ContentsHolder(view);Overridepublic void onBindViewHolder(ContentsHolder holder,int position)holder.bind(mBookContents.get(position),position);Overridepublic int
15、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+)/设置背景填充颜色GradientDrawable drawable=(GradientDrawable)mThemeBtnsi.get
16、Background();drawable.setColor(mPopupColorsi);/设置边框颜色if(mThemeBtnsi.getId()=usedButton.getId()int strokeColor=mStrokeColorsi;drawable.setStroke(5,strokeColor);else drawable.setStroke(5,mPopupColorsi);/未选择 button 的边框颜色和填充颜色一致15private void setCurSeekBarStyle()for(SeekBar seekBar:mSeekBars)/获取 seekBar
17、 的 layer-list drawable对象LayerDrawable layerDrawable=(LayerDrawable)seekBar.getProgressDrawable();/层次包括背景图和进度,所以进度直接设为 1,获取并设置进度条背景Drawable drawable=layerDrawable.getDrawable(1);drawable.setColorFilter(mStrokeColorsmTheme,PorterDuff.Mode.SRC);/获取 thumb 背景Drawable thumb=seekBar.getThumb();thumb.setCol
18、orFilter(mStrokeColorsmTheme,PorterDuff.Mode.SRC);字体功能主要实现代码private void initViews()mTextColors=new int0 xff121111,/黑0 x8A000000,/常规0 xffa9a8a8,/夜间0 xfbe6e3e3,/白0 xff486c94,/蓝;Overridepublic void onClick(View v)int typeIndex=mTypeIndex;int color=0;for(int i=0;i mButtons.length;i+)if(v.getId()=mButto
19、nsi.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();16if(mListener!=null)mListener.onTypefaceSelected(mTypeIndex);/改变颜色if(color!=0)if(mListener!=null)mListener.onColorSelecte
20、d(color);3.3用户模块设计3.1.1 用户模块流程图图 3.3 用户模块流程图173.1.2 用户模块关键代码用户管理类方法主要实现代码,增加用户,检测用户/增加public boolean insertUser(String name,String password)User user=new User();user.setName(name);user.setPassword(password);/创建数据库LitePal.getDatabase();return user.save();/通过用户名查找用户是否存在public boolean findUserByName(St
21、ring name)List users=LitePal.findAll(User.class);for(User person:users)if(name.trim().equals(person.getName()return false;return true;/查找密码是否正确public boolean findUser(String password)List users=LitePal.findAll(User.class);for(User person:users)if(password.trim().equals(person.getPassword()return fal
22、se;return true;用户注册private void register_check()if(isUserNameAndPwdValid()boolean flag;String name=mAccount.getText().toString().trim();String password=mPwd.getText().toString().trim();String rePassword=mPwdCheck.getText().toString().trim();flag=userManager.findUserByName(name);18if(!flag)Log.d(tag,
23、注册失败);Toast.makeText(this,用户名已经存在,Toast.LENGTH_SHORT).show();return;if(!password.equals(rePassword)Toast.makeText(this,输入的密码不同,Toast.LENGTH_SHORT).show();return;else flag=userManager.insertUser(name,password);if(!flag)Toast.makeText(this,注册失败,Toast.LENGTH_LONG).show();return;Toast.makeText(this,注册成功
24、,Toast.LENGTH_LONG).show();List people=LitePal.findAll(User.class);for(User person:people)Log.d(RegisterActivity,person name is+person.getName();Log.d(RegisterActivity,person password is+person.getPassword();Intent intent_Register_to_Login=newIntent(RegisterActivity.this,LoginActivity.class);/切换 Use
25、r Activity至 Login ActivitystartActivity(intent_Register_to_Login);finish();用户登录if(isUserNameAndPwdValid()boolean flag,flag2;/取得用户界面输入String username=name.getText().toString();String password=pass.getText().toString();flag=userManager.findUserByName(username);flag2=userManager.findUser(password);if(f
26、lag)Toast.makeText(this,该用户不存在,Toast.LENGTH_SHORT).show();return;19if(flag2)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数据库设计数据库利用了第三方数据库框架 Li
27、tePal,LitePal 是一款开源的 Android 数据库框架采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以不用写一行SQL 语句就可以完成创建表、增删、改、查的操作。实现过程(1)添加依赖图 3.4 添加数据库依赖(2)新建 assets 目录,然后创建litepal.xml 资源文件,用于创建数据库名称,数据库版本、表名、数据库存放位置图 3.5 数据库资源文件20数据库资源文件内容数据库实体类,用户实体类,电子书实体类public class User extends LitePalSupport public String name;/用户名public Str
28、ing password;/密码public User()public class Label extends DataSupportprivate int mBookId;private String mDetails;private String mProgress;private String mTime;private boolean isPrePageOver;private String readInfoStr;/readInfo对象序列化编码后的 String214运行效果打开应用程序,进入主界面查看整体效果首先打开 APP 进入引导页图 4.1 程序开始页图 4.2 主页面运行
29、效果22点击书架按钮跳转到书架页面图 4.3 书架页面运行效果点击任意一本电子书查看运行效果图 4.4 电子书阅读效果点击屏幕底部显示出功能按钮23图 4.5 阅读时功能按钮显示效果点击功能按钮-目录查看效果4.6 显示整部电子书的目录24点击目录跳转到第九章,查看效果图 4.7 目录跳转效果点击功能按钮设置 查看效果图 4.8 功能按钮设置效果图25点击切换主题选择夜间主题,查看效果图 4.9 夜间主题效果切换翻页效果,将主题切换为护眼主题方便演示。切换为覆盖翻页查看效果。左图为仿真翻页,右图为覆盖翻页图 4.10 翻页效果对比26更改字体大小,将字体调到最大图 4.11 更改字体大小点击功
30、能按钮切换字体样式,切换为楷书字体查看效果。左图为系统默认字体,右图为楷体。图 4.12 字体修改前后对比图27点击修改字体颜色为蓝色,查看效果图 4.13 修改字体颜色点击功能按钮书签按钮,将当前阅读页添加到书签图 4.14 添加书签28长按书签按钮,查看书签图 4.15 书签列表跳回主界面点击我的按钮跳图 4.16 个人中心列表295总结经过一周的时间终于完成了这个电子书 APP,整个过程在设计的时候觉得很简单但是真的动手实践起来确实还是有一定难度的,开发过程中也遇到了很多困难,比如翻页的效果该这么让它动态的实现,字体的大小怎么随着字体条的调整而改变等等。还好经过不放弃不断的去学习和钻研,
31、才把这个电子书的基本功能实现了。俗话说,不积跬步无以至千里,不积小流无以成江海,程序中的很多方法我都在书中和网上找了又找,试了又试,一遍又一遍,最终才把需要的方法融入到程序中,实现了必要的功能模块。在开发之前我首先在手机应用商店下载了几款电子书 APP,书旗小说、QQ 阅读、掌阅app。了解了一个电子书APP 基本具备的功能熟悉之后自己在开始慢慢想如何布局,如何去实现每个模块的功能,比如不能将一堆的功能模块按钮都堆到阅读的页面上,这样会很影响阅读的效果,我们在阅读电子书的时候肯定是希望完全就是自己的书而不是整个页面还有其他什么一堆乱七八糟的,这样就必须把功能按钮这些隐藏起来在需要的时候在拿出来。这些都是要去构思的。构思完之后最重要的还是怎么去实现这些功能,不然一切都是纸上谈兵,结合上在课堂上学的和自己在查阅一些资料,实验最终也实现了,一步一步的去实现功能就像是一砖一瓦在盖一个房子最后功能调试完成,房子盖好了看着自己搭建的整个模块还是很开心的。通过完成这个实验我也学到了很多知识,对平时老师讲的一些知识也得到了巩固也了解到自己还是很多知识不会,要学习的内容还是很多,今后一定要更积极的去学习多做项目使自己在实践中学习,在实践中学习能使自己更有收获,纸上得来终觉浅,绝知此事要躬行,只要肯努力就会有回报的。30
限制150内