Android手机电子书阅读器的设计与实现.docx
《Android手机电子书阅读器的设计与实现.docx》由会员分享,可在线阅读,更多相关《Android手机电子书阅读器的设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
![Android手机电子书阅读器的设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-1/10/0b1b2ac8-29c5-4374-b5f0-d083bbd6f5c3/0b1b2ac8-29c5-4374-b5f0-d083bbd6f5c31.gif)
Android手机电子书阅读器的设计与实现
封面
作者:
PanHongliang
仅供个人学习
UNIVERSITYOFTECHNOLOGY
毕业设计
题目Android手机电子书阅读器的设计与实现
学生姓名宋攀飞
学号00101106
专业班级通信工程
指导教师
学院通信学院
答辩日期2012年10月
摘要
在这个信息化的时代,计算机越来越快速,手机也越来越智能化,所以,一个好的应用软件在很大程度上能提升一个手机的销量和品牌.而在智能手机上安装一个拥有丰富功能支持的电子书阅读器,更加能增加吸引力.
本设计采用Android平台,根据对手机电子书阅读器的客户需求分析和技术可行性分析,经过总体设计和详细设计编码测试等阶段,完成了电子书阅读器软件的设计.不仅实现了电子书阅读器最基本的阅读功能,而且还为用户提供了丰富的功能支持,包括找书,书签,自动翻页以及阅读界面设置的操作.而本次设计最大的特点则是通过屏幕触控实现了移动时的翻页特效.经过不断的测试与完善,电子书阅读器功能稳定,并且在真机上对其进行了测试与验证,基本上达到了用户的需求标准.
关键词:
Android;电子书阅读器;屏幕触控;翻页;书签;
第1章前言
1.1课题提出的背景目的及意义
1.1.1课题提出的背景
在这个信息化的时代,IT业已经成为世界发展的主流,我们对信息技术的依赖远远超过了对我们自己的依赖,计算机和手机已经成为我们日常生活中不可缺少的获得信息的渠道.正因为如此,各种各样的软件层出不穷,我们的生活也因为各种各样的软件变的更有滋有味.不缺乏娱乐性,也不缺乏教育意义,让我们从这些软件中受益匪浅,使我们看到了相比以前的巨大进步.我们的依赖性也越来越大,越来越离不开这些给我们提供日常信息的工具.手机也已不再仅仅是简单的人与人通话的工具,而是在很大程度上成为了我们获取信息的一个更好的渠道.开发一款好的手机软件是相当必要的.以前我们看看杂志,小说都要去图书馆借阅,而且时间有限,很不方便;而现在是在电脑上或者手机上看杂志,看小说,文档.以此看来,一个好的手机阅读器软件的开发是相当有必要的.
1.1.2课题提出的目的
此次设计的目的很明显,就是给予阅读者更大的便利性,阅读者不用再到处拿着一本厚厚的书籍,大大减少了读者的负担,只需要下载一本txt格式的电子书,放在sd卡里边,就是人们的生活百科.
1.2设计思路及研究方法
1.2.1设计思路
阅读器的设计流程主要是按照软件设计的一般流程:
需求分析、概要设计、详细设计、测试与维护的基本流程来设计开发的.首先,从整体分析软件功能,将功能模块化;然后对每个模块进行调试.最后对各个模块进行系统集成.
1.2.2研究方法
本系统在整体框架研究方法采用的是问卷调查法和观察研究法.而在总体设计上采用的是结构化方法,在局部底层开发上为便于交流采用快速原型法.
结构化系统的设计方法是在结构化程序设计思想基础上发展起来的,它的基本涵义是一个系统由层次化的程序模块构成,每一个模块只有一个入口和一个出口,每一个模块只归其上一级模块调用,并有模块连接的准则和构造模块的标准,而且用系统结构图来表达系统的结构,尽可能用最优的方式将系统内各部分组织起来.
第2章需求分析
2.1软件的基本功能要求
在现行业务流程和数据分析的基础上基本上确定了系统的功能,设计也基本上达到了目标.根据软件设计的步骤,需求分析是软件设计成功的基础,也是必不可少的步骤.同时,也对软件的设计提出了具体的要求.在做足了充分的调查研究之后,基本可以确定软件的功能界面如下:
(1)刚打开软件时的欢迎动画界面.
(2)在没有阅读记录情况下打开软件时进入的软件说明界面.
(3)在主界面下单击“菜单”按钮后弹出的欢迎主菜单界面.
(4)找书选择界面,用来选择找书的途径.
(5)网络下载列表界面,用来列出服务器端可供下载的文档.
(6)下载完成提示界面,用户从服务器端完成指定文档下载任务时显示的界面.
(7)已存在要下载文件提示界面,当用户指定要下载的文档在SD卡中已存在时显示的界面.
(8)SD卡文件列表界面,列出SD卡中存在的所有资料.
(9)阅读界面,用来阅读文档的主界面,是整个阅读器设计核心部分.
(10)书签功能界面,用来选择与书签相关的具体操作.
(11)添加书签功能界面,将当前阅读到的位置以书签名和书页号的形式存至书签表,
方便下次阅读.
(12)选择书签功能界面,通过选择书签记录跳转至想要阅读的位置.
(13)删除书签功能界面,再不想要该条书签记录的情况下实现删除操作.
(14)自动翻页功能界面,实现不同时间间隔自动翻页的效果.
(15)设置界面,用来选择对阅读界面不同的设置.
(16)背景音乐界面,可在阅读的同时欣赏音乐,更大限度的提升.
(17)背景图片界面,用来设置不同的阅读界面风格,使阅读更为个性化.
(18)字体颜色界面,用来设置不同的阅读字体颜色,提升用户的视觉体验.
(19)字体大小界面,通过设置字体大小来满足实际应用中的多重需求.
基本说明如下:
本系统是一个电子书阅读器,主要包含一个主界面,用来实现阅读的功能.在阅读界面时,点击menu,手机底部会出现四个选项:
找书、书签、自动翻页、设置.点击找书选项会有两种操作可供选择,分别是在SD卡中找书和通过网络下载;点击书签选项会有三种操作可供选择,分别为添加书签、选择书签和清空书签,其中长按选择书签列表中的某条书签记录也可达到删除该条记录的目的;点击自动翻页选项会有四种操作可供选择,分别为每隔30秒、40秒、50秒自动翻页和停止自动翻页;点击设置选项会有四种操作可供选择,分别为设置背景音乐、设置背景图片、设置字体颜色和设置字体大小,为此用户可通过自己的喜好来设置不同阅读界面的风格,并且可以选择自己喜爱的音乐作为背景音乐,在阅读的同时欣赏.
2.2系统架构
本设计总体逻辑结构层次划分如图2.1所示.
图2.1功能结构图
2.3开发环境
Ø数据库
由于本设计和数据库密切相关,但是对数据库的要求不高,因此可用Android系统本身自带的Sqlite数据库.
ØAndroidSDK与Eclipse开发的插件ADT
由于本设计是基于Android系统的,而Android开发环境的搭建是基于Eclipse的,因此需要下载AndroidSDK与Eclipse开发的插件ADT.
Ø服务器
由于本设计需要用服务器来为其提供下载服务,而且对服务器的要求不高,因此在设计时用Tomcat作服务器.
第3章软件设计
3.1总体软件结构设计
打开电子书阅读器之后,软件会先查看上次阅读的最后记录,以此作为根据来进行判断从而跳转至相应的阅读界面.然后用户就可在阅读界面下通过选择menu来执行想要的操作:
找书、书签、自动翻页、设置.点击找书选项会有两种操作可供选择,分别是在SD卡中找书和通过网络下载;点击书签选项会有三种操作可供选择,分别为添加书签、选择书签和清空书签,其中长按选择书签列表中的某条书签记录也可达到删除该条记录的目的;点击自动翻页选项会有四种操作可供选择,分别为每隔30秒、40秒、50秒自动翻页和停止自动翻页;点击设置选项会有四种操作可供选择,分别为设置背景音乐、设置背景图片、设置字体颜色和设置字体大小,为此用户可通过自己的喜好来设置不同阅读界面的风格,并且可以选择自己喜爱的音乐作为背景音乐,在阅读的同时欣赏.
根据各个模块的不同功能,对本设计进行了层次结构的划分.在Eclipse下创建了一个名为Test的工程,工程的结构图如图3.1:
图3.1软件工程结构图
该功能包是通过AndroidSDK自动生成的,主要包括以下内容:
(1)src源代码目录:
该目录存放Android应用程序所有的源代码.该目录项有不同的包,包中对应开发的源代码,开发过程中的主要精力都集中在开发src目录下内容.
(2)gen文件夹目录:
该目录存放了Eclipse的ADT插件自动生成的R.java文件.实际上R.java定义了一个R类,它包含了应用中用户界面、图像、字符串等各种资源与之相对应的资源编号(id).这些资源编号都是系统自动生成的,即有一资源对象,系统就为此在R类中生成相应资源编号,好比一本字典.
(3)Res资源目录:
该目录定义了drawable、layout及values3个目录.
a.drawable目录:
该目录下有drawable-hdpi,drawable-ldpi,drawable-mdpi3个文件夹,分别用来存放不同分辨率的图片资源,用于不同分辨率的手机的开发,可以通过Resource.getDrawable(id)获得该资源.
b.layout目录:
该目录下包含了所有使用XML格式的界面描述文件.主要用于表述应用程序的用户界面布局,也用于描述用户界面和接口组件.
c.values目录:
该目录包含了使用XML格式的参数描述文件,也可以在此添加一些额外的资源,如字符串、颜色、样式和数组等.主要用于在代码中通过R类来调用它们,而不直接使用,这样可将代码和资源分开管理,便于维护.
除了以上文件夹外,还用一个AndroidManifest.xml文件,该文件是系统的控制文件,告诉系统如何处理创建的所有顶层工程,尤其是Activity,凡是需要用到的组件都要在此注册.同时该文件也是所有Android应用程序都需要的文件,其描述了程序包的全局变量,包括公开的应用程序组件和每个组件的实现类,什么样的数据可以操作,在什么地方可以运行等.
在这个文件中最重要的一个内容就是Intent过滤器,这些过滤器描述了何时、何种情况下让Activity启动.当一个Activity(或操作系统)想要执行一个动作,它将创建一个Intent对象.该对象包含了很多描述符,描述了想做的操作,像处理数据,数据的类型,以及一些其他的信息.Android将Intent对象中的所有公开的Intent过滤器比较,找到一个最能恰当处理请求的数据和动作的Activity.
3.2接口设计
3.2.1外部接口
在用户界面部分,根据需求分析结果,用户需要一个友善界面.在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息.在界面设计部分,本系统按照Microsoft公司的用户界面设计标准,为用户提供友好、方便、直观、简洁的操作环境.
本系统采用了窗口继承的方式,使窗口有统一的界面风格.同时,对错误信息、提示信息进行标准化,尽量做到清晰明了.
3.2.2内部接口
系统在功能模块的设计上,以“高内聚、低耦合”为设计目标.内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递.具体参数的结构将在下面数据结构设计的内容中说明.接口传递的信息将是以数据结构封装的数据、参数传递或返回值的形式在各模块间传递.
3.3数据库设计
3.3.1数据模式设计
一共设计了3张表,是:
(1)阅读记录表(阅读记录的ID,书的路径,阅读记录数据)
(2)书签表(书签的ID,书签对应的阅读记录的ID,书签名,书页)
(3)上次阅读记录表(上次阅读记录的ID,书的路径,上次阅读到的书页,上次阅读时的字体)
数据库表的设计如下:
图3.2数据库结构图
3.3.2数据表格设计
本数据库用的是一个小型数据库sqlite3,在数据库中创建了三个表格.即BookRecord、BookMark和LastTimePage,分别用来存放阅读记录的数据、书签的数据和上次的阅读记录数据.具体内容如表3-1、表3-2和表3-3所示:
表3-1阅读记录表
字段名称
数据类型
字段大小
是否主键
说明
rid
Integer
8
是
阅读记录的ID
path
文本
50
否
书的路径
data
字节数组
不定
否
预读记录数据
表3-2书签表
字段名称
数据类型
字段大小
是否主键
说明
mid
Integer
8
是
书签的ID
ridfk
Integer
8
否
书签对应的阅读记录的ID
bmname
文本
50
否
书签名
page
Integer
8
否
书页
表3-3上次阅读记录表
字段名称
数据类型
字段大小
是否主键
说明
lid
Integer
8
是
上次阅读的记录ID
path
文本
50
否
书的路径
page
Integer
8
否
上次阅读到的页数
fontsize
Integer
8
否
上次阅读的字体大小
3.3.3表的具体设计
表名:
BookRecord
表中字段名称:
rid,path,data.
说明:
用varchar类型存储path,blob类型存储相应的路径下的阅读过程,并规定rid为阅读记录表的主键.
表名:
BookMark
表中字段名称:
mid,ridfk,bmname,page.
说明:
创建书签mid为integer类型主键,定义书签名字bmname为varchar类型,书页号page为integer类型的书签表.
表名:
LastTimePage
表中字段名称:
lid,path,page,fontsize.
说明:
创建书签lid为integer型主键,定义路径path为varchar类型,书页号page为integer类型,字体大小为integer类型的上次阅读记录表.
3.3.4数据字典
数据字典是物理数据库的具体体现.
表3-4BookRecord数据字典
字段名
类型
阅读记录的ID
整型
书的路径
文本
阅读记录数据
字节数组
表3-5BookMark数据字典
字段名
类型
书签的ID
整型
书签对应的阅读记录的ID
整型
书签名
文本
书页
整型
表3-6LastTimePage数据字典
字段名
类型
上次阅读记录的ID
整型
书的路径
文本
上次阅读到的页数
整型
上次阅读时字体大小
整型
3.4软件设计模型
建立系统数据模型的主要工具是实体——关联图,即E-R图.
E-R图的图形符号约定如下表:
表3-7E-R图
图3.3存储阅读记录的E-R图
图3.4存储书签的E-R图
图3.5存储上次阅读记录的E-R图
3.5软件维护设计
采用MVC设计模式,将UI层和业务逻辑层分离开来,采用针对接口编程的方式,降低了代码之间的耦合度,便于软件的升级和程序性能的优化.
第4章系统功能模块的设计与实现
4.1关键技术
4.1.1android平台及java语言
以下图表展示了Android操作系统的主要组成部分:
图4.1Android系统架构图
本系统是以java为编程语言,从接口到功能,灵活多变.主要运用的是Activity之间的相互跳转,然后利用Intent实现多个程序同时运行的效果.运行中如果某个Activity的画面被另一个Activity所取代,则这个Activity停止.本系统通过把View类与XML(可扩展标记语言)将用户界面放置在视图窗口,然后注册事件来完成相应的功能.例如,当视图要处理用户的点击事件的时候,android就要向框架注册一个OnClickListener等.本系统中触发事件都是通过这种来实现的.Java语言是一种简单易用,面向对象的,可移植的语言.它具有很多的优越性和特点,比如:
平台无关性,安全性,面向对象,健壮性等等.本系统就是在android平台上使用java语言完成的系统.
4.1.2中介软件
中介软件是android操作系统应用程序的桥梁,主要分为函数和虚拟机.Android的数据存储采用sqlite3数据库系统,用户可以用ContentProvider类获取数据.android中数据存储技术主要有:
文件存储、preference、sqlite、ContentProvider和网络存储,在本软件中主要使用到了文件存储、sqlite和ContentProvider,文件存储是以流的形式读写文件,可以以文格的格式,也可以以二进制的形式,在java语言中要使用流,则写入文件的对象必须进行序列化,sqlite是嵌入式移动设备中常用的轻量级数据库,可看作计算机上使用的sqlserver、oracle数据库.本软件中,用户生词本中的数据都存在sqlite数据库中,而进行数据备份和恢复时则是用文件作为介质保存数据.
4.1.3四大组件
Android的四大组件是支持android应用程序显示,跳转,服务和事件的重要工具,它们主要是:
Activity(活动),Intent(意图),Service(服务),ContentProvider(内容提供器).Activity是一个用户的界面基类,属于UI.一个Activity就是一个类,每个Activity类都需要继承Activity基类,并与其他控件结合使用.Intent实现Activity、service等之间的跳转和数据传输.Service是后台服务,为用户提供数据支持.ContentProvider负责数据的存储和读取.在android中,软件UI通常使用xml技术设计,而xml中控年的位置和状态则离不开布局的使用,android中常用的布局有5种,分别是:
AbsoluteLayout、LinearLayout、RelativeLayout、FrameLayout、TableLayout,由于布局的使用,并且布局之间可以互相嵌套,使得android软件UI的设计变得非常灵活,即使是一些非常复杂的界面设计,只要合理的使用布局,也会使开发变得很容易.
4.1.4sqlite3数据库
Sqlite3是建立在android平台上的一个数据库,除了支持varchar(n)(可变字符),
char(n)(定长字符)等数据特性外,还支持空(NULL),整型(INTEGER),文本类型(TEXT)等数据类型.它的特点入下:
轻量级(只需带上很小的动态库,就能享受它的全部功能)、独立性(使用不需要安装,在部署的时候能省去很多麻烦)、隔离性(数据库中所有的信息都包含在一个文件内,方便管理和维护)和安全性(可以同时读取数据,但同时只有一个能够写入数据)等特性.
4.1.5Tomcat服务器
服务器的架设:
(1)在http:
//tomcat.apache.org/下载合适版本的Tomcat.
(2)在/apache-tomcat-5.0.28/webapps目录下新建文件夹txt.
(3)在txt文件夹下创建文本文件txt_list.txt.
(4)在txt_list.txt下写入内容.
(5)根据txt_list.txt的内容,创建文本.
(6)打开/pache-tomcat-5.0.8/bin目录.
(7)打开/pache-tomcat-5.0.8/bin目录下的startup.bat.
(8)打开浏览器,在地址栏输入http:
//localhost:
8088/,效果如图4.2所示:
图4.2bin目录图
4.2欢迎界面的实现
本模块主要完成阅读器欢迎界面的渐变效果显示,在进入程序界面时首先调用.该功能的实现主要是通过绘制黑色矩形,然后对其进行平面贴图,并通过不断的更改图片的透明值来实现的.
4.3主控制类的实现
ReaderActivity类是主要控制程序运行的类,实现了各个界面的有序切换,各个按钮和对话框的监听事件,加载了程序中用到的相关资源,有效地控制了程序的运行.
(1)onCreate方法是程序运行时,进入主界面前调用的方法,在此方法中对程序中用到的相关变量进行赋值,并为相关类创建对象,以方便调用.
(2)onKeyDownf方法是重写父类的onKeyDown方法,当按下不同的键时,此方法设计返回键(4号键)和Menu键(82号键),并且本设计中支持屏幕触控事件和键盘监听事件.
(3)onCreateOptionsMenu方法表示的是程序运行时,用户按下键盘上的Menu键后,显示的找书、书签、自动翻页和设置的按钮选项,当用户按下不同的键后,弹出相应的对话框.
(4)sendMessage方法表示各个界面相互跳转时调用的方法和不同线程之间传递消息的方法.
(5)isWhichTime方法用以判断是否为第一次打开程序,如果是,则程序中的变量值为默认值;若不是第一次打开,则获取上一次打开时设置的值.
(6)saveCurrentData和savePreference方法表示当程序退出、换书和第一次打开一本书时都要想数据库中BookRecord表中插入数据,第一次打开一本书时,向数据库中插入数据是因为,如果表中不存在当前书的信息,则无法存书签.
4.4工具类的设计
(1)Constant类存放了整个设计过程中,大部分类经常用到的常量值,如字体大小、
字体颜色、屏幕的宽和高等.将这些常量值放在一起,不但方便了设计,而且方便管理.
(2)加载文本的工具类TextLoadUtil的设计主要是为文本的读入提供方法.
4.5阅读界面的实现
ReaderView类主要负责自适应屏、绘制阅读器的主界面、实现键盘和屏幕的触控事件以及实现翻页功能.
(1)surfaceCreated方法主要负责成员变量的初始化工作.
(2)onDraw方法负责标题、广告条、左右页面等图片的绘制.其中广告条的绘制是动态的,在广告条线程中值需要更改图片数据下标志值NUM.
(3)onTouchEvent方法负责处理屏幕触控事件,屏幕触控事件为移动是翻页特效的实现.
(4)drawPage方法负责根据阅读记录对象ReadRecord绘制左右两页面.
图4.3从用户进入软件到阅读界面时的流程图
图4.4用户在阅读界面时的操作流程图
当用户进行阅读界面的时候,首先阅读控制模块会根据用户之前阅读到的位置来确定载入电子书文本的起始位置,然后会根据手机终端屏幕大小和字体大小来确定该页应该显示多少文字.在获取文字长度之后,会读取相应长度的字符并以此为基础生成左右相邻两页内容的bitmap图片.用户在阅读的时候可以触摸屏幕的不同位置进行不同操作,左下角是往前翻页,右下角是往后翻页.
4.6找书功能的实现
找书功能分为在SDCARD中和在网络中找书.
(1)在SDCARD中找书
用户可以将已有的txt格式的书放在SDCARD中,通过本阅读器的在SDCARD中找书的功能将书加载进阅读器进行阅读,具体步骤如下:
按下Menu键,在主界面中弹出的选项中选择找书,弹出找书对话框,选中SDCARD,即可根据当前路径获得对应文件数组,并将数组中的所有文件加入到文件列表中,然后再为文件列表添加监听,从而实现在点击某一文件时跳转至对应页面的功能.
(2)在网络中找书
本阅读器不仅提供了在本地找书的功能,而且也支持在网络中找书.具体步骤如下:
当单击在网络中找书的按钮时,调用downTxt方法下载txt文档.
图4.5用户找书时的操作流程图
4.7书签功能的实现
(1)添加书签功能的实现
在本设计的书签功能中有很多漂亮的Dialog,这些Dialog是通过xml文件自己布局的或者是通过Java代码自定义实现的.其中styles.xml文件设置了Dialog的背景图片和标题格式,是设置对话框属性的文件.在完成了输入书签对话框所需要继承的类、布局文件和对话框属性的文件之后,创建了书签输入对话框,并通过onPrepareDialog方法为自定义的输入书签对话框中的按钮添加了监听.