基于Android的电子书阅读器的设计与实现.docx
《基于Android的电子书阅读器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Android的电子书阅读器的设计与实现.docx(37页珍藏版)》请在冰豆网上搜索。
基于Android的电子书阅读器的设计与实现
毕业设计说明书(论文)中文摘要
Android平台现在非常的火,我们平时使用的智能手机,平板电脑,还有新的智能电视,有很大部分是基于Android平台的,很显然,它在人们生活中的表现得越来越重要。
本文详细介绍了采用JAVA语言,设计并开发一个基于Android平台的电子书阅读器的过程。
从一开始的准备工作、系统的需求分析和设计、系统的实施、系统的测试和部署等方面介绍了该阅读器的开发过程。
本文实现的这个电子书阅读器主要是用于阅读txt格式的电子书,可以实现字体大小的调整,阅读的翻页等功能。
关键字:
JAVA语言,Android平台。
前言
世界在不断的向前发展,科技在不断的更新,随着计算机技术的不断的发展,它已经融入到人们的生活的当中,人们已经无法离开手机,智能手机也一点点的流行起来,与此同时智能手机的应用开发也开始不断的成熟,近年来,Android系统在手机端的市场占有率在不断的提高,市场的变大,需求肯定也会变大,技术也会不断的成熟。
Android平台可以说是当下最为流行的一种平台了,Android用的是Linux的内核,但不能说是Linux系统。
Android在Linux的基础上开发的操作系统,移动端用的会比较的多。
Android一开始只支持手机端,也不是有Google开发的,2005年的时候被Google收购,然后一点点的改良调整,慢慢的扩展到其他的领域。
在市场占有率上面,到12年底,其占全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。
Android系统在人们生活中的体现越来越多。
本文详细介绍了采用JAVA语言,设计并开发一个基于Android平台的电子书阅读器的过程。
JAVA是一种非常常见非常受欢迎的程序设计语言,JAVA是特地应对C++中的难点所开发的,C++是基于对象的程序设计语言,而JAVA则是纯面向对象的编程语言,JAVA相对于C++来说较为简单,更加容易让人理解,学习起来更加方便,很好理解并不意味着非常的简陋,JAVA的功能非常的强悍,使用起来也是非常的方便。
对于该课题来说,所要实现的基于Android的电子书阅读器应该是一个界面清晰明了的,能让用户有更好的使用享受的一款APP。
第一章绪论
1.1引言
随着当今社会经济日益发展,人们的生活水平有了很大的提高,大家开始不仅满足于一些基本的物质生活需要,人们的文化生活也变的多种多样,精神世界得到了进一步的丰富,与此同时,人们对文化生活,精神世界内容的需求也在不断跟新,而书本做为精神力量的来源之一,关于它的一些改变必定影响着人们的生活。
伴随着智能手机的出现,更多的年轻人开始脱离以前的纸质书本阅读,电子书边的越来越流行。
大众对电子阅读应用的需求也随之增长。
随着Android市场份额的不断增加,Android应用开发技术也日益的成熟。
在Andorid火之前,市场上的智能手机大多数是塞班系统的,那是塞班系统占有了很大的市场份额,但是塞班系统有着很多的不足,它的可移植性比较多额差,慢慢的,随着塞班的系统的陨落,Android系统逐渐的取得了用户的心,它的强势出现并迅速占领了智能手机系统的市场。
它的扩展性和移植性是非常好的,所以渐渐的,因为它的这些优势,安卓慢慢的变成了时下应用最为广泛的,最受欢迎的,最流行的一种嵌入式设备的操作系统,比如笔记本、MP4、机顶盒、GPRS定位设备、平板电脑,电视机等。
安卓系统给嵌入式设备带来了全新的,完全不一样的用户应用体验,从最简单最广泛的手机中我们就可以看出Android系统的应用是多么的丰富。
最老的手机是又大功能又少,后来慢慢到了塞班的系统,它的界面以及应用丰富了很多,但是当到了安卓的系统后,我们可以发现是一个天翻地覆的变化,界面可以说是绚丽,应用程序更可以说是以数百万来记。
正是因为安卓系统的出现才使得手机变成人们生活中不可或缺的一部分。
1.2主要研究内容
使用JAVA语言进行最基本的编程操作,编写一个基于Android平台的电子书阅读器,使之能够正常的投入使用,其基本的功能包括以下几个点:
1)在初次安装应用的时候,在正式进入主活动的时候弹出一个Dialog进行软件操作说明,及相关性的一些软件信息的提示。
2)主要实现TXT格式的电子书的正常阅读功能,即能在屏幕显示txt的文本内容。
3)能够根据客户的需求,进行字体大小的调整,使之适应更加多的阅读人群,使得用户体验更加的优质。
4)关于电子书书签功能的研究,增强用户体验。
5)实现本地文件的导入功能,增加阅读软件的实用性。
1.3本章小结
这一章的内容主要阐述了一下Android系统的相关历史,同样的简单介绍了一下,对与Android开发的相关知识点。
重点介绍了一下有关本次课题所要求开发应用的相关功能要求。
第二章环境配置
2.1目标
在实施这个设计之前,我们会有有很多的必要的事情要去完成,首先,我们要在电脑上搭建平台,配置JDK的环境变量,安装开发所要用到的一些必要的软件Eclipse或者AndroidStudio,在这边,笔者使用的是Eclipse的开发工具,在安装完Eclipse之后,我们需要安装安卓的虚拟机SDK以及安装完成之后如何让虚拟机可以运行的AVD的设置。
2.2运行环境
2.2.1硬件资源
一部安装了Android系统的智能手机,或者PC下的AVD。
2.2.2软件资源
操作系统:
Windows(XP,7,8均可,笔者用的是win8)。
AndroidSDK。
JDK1.7.0_45,或者其他版本。
Eclipse。
2.3环境搭建
2.3.1JDK安装
1)JDK的下载:
关于JDK的下载,可以翻墙后进入oracle官方网战下载,在上面找到对应的自己电脑版本的JDK下载即可。
下载后按照提示安装好JDK。
2)打开电脑配置JDK的环境变量的界面
步骤1:
打开计算机的系统属性,在高级面板上点环境变量按钮,会有环境变量的对话框出现。
如图2-1所示:
图2-1环境变量图
步骤2:
给用户配置环境变量:
a新建一个JAVA_HOME的变量,它的值设为c:
\ProgramFiles\Java\jdk1.7.0_45
如图2-2所示:
图2-2具体变量图
b新建一个变量,名为:
CLASSPATH
值为:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
如图2-3所示:
图2-3CLASSPATH图
C将JDK对应文件夹中bin文件夹的地址添加到path中。
如图2-4所示:
图2-4Path图
步骤3:
检验JDK是否安装成功:
打开cmd,输入java。
如图2-5所示:
图2-5查看JDK是否安装成功图
2.3.2google集成环境的安装
关于它的下载,依旧是到对应公司的官网去下载。
找到合适的版本点击下载即可。
然后是下在不同版本的安卓平台:
如图2-6所示:
图2-6下载安卓版本图
完成所有的下载之后就基本完成了配置工作。
在所有配置完成之后我们还需要创建一个AVD来为我们服务,为了能够让安卓应用程序可以在模拟器上运行,我们必须要创建一个AVD。
打开Eclipse,找到SDKManager,然后左击旁边面板的VirtualDevices,按步骤填完相应的内容,最后点击CreateAVD,我们就创建好了一个AVD了。
下面就可以进行我们的软件编程了。
2.4本章小结
本章主要介绍了在程序设计之前,我们需要用到的环境和工具,和他们的基本搭建方法。
在配置完成了之后,还有一个必要的设置等着我们去设置,很显然就是创建安卓的模拟器了(AVD),让我们写的程序能够编译运行在我们自己所创建的模拟器上面,或者也可以不使用模拟器,还是直接使用真机来进行调试运行测试。
以上的这几个设置虽然并不是很难实现,但这些设置是非常有必要的,可以说它们是整个应用开发的一个基础,如果我们没有对这些进行配置,那我们肯定什么都做不了,代码写了等于白写。
从这一章节中,我们可以很明显的看出基础的重要性。
第三章相关技术介绍
3.1JAVA概述
Java是一个跨平台应用软件编程语言,它可以写面向对象的编程语言Java技术具有优良的普遍性,并具有很大的优势,在网络的发展和移动电话的发展,它包括四个组件的术语:
Java编程语言,java的文件格式,Java虚拟机(JVM)。
Java应用程序接口(JavaAPI)。
Java的三大体系,分别为JavaSE,J2EE,JavaME。
三大体系各有各的用途,而且使用起来都是非常的有好。
可以说,Java是当下非常流行的一种开发语言,除Java外还有其他流行的编程语言,他们之前各有千秋,关于它们之间的比较如下:
1.和JAVA有90%的一样的c#是Microsoft的一个产品,非常的有针对性,主要是用于对Windows的开发,C#用来写关于windows的编程还是非常不错的,但是它有一个非常不好的地方就是不支持夸平台。
2.简洁的解释性语言Ruby,是一款纯粹的面向对象编程语言,是一款弱类型的语言,就连变量都不需要去声明,所有的变量没有类型,就压根不看重类型这一概念,但是它提供了非常多方便的功能,特别的快捷,例如提闭包、代码块、迭代器和集合等等,它还是支持跨平台,只一点非常的好。
3.具有脚本语言中最丰富和强大的类库功能强大而完善的通用型语言Python,支持主流OS,具有可扩展行和清晰的语法特色,使用起来思路非常的清楚。
总的来说,像c,c++,c#那种的编程语言是属于编译语言的范畴,他需要专门的编译器来实现。
而像Ruby、Python语言这种类型的叫做解释类编程语言。
将原文件解释称机器语言,直接让机器跑起来。
JAVA有这两种语言的特征,因此,它使用起来会非常方便,它需要经历编译但不会生成特定平台的机器码,它生成的时与平台无关的字节码文件。
字节码文件需要JAVA解释器(JVM)来解释执行。
JVM相当于一台小计算机,和计算机一样有着很多的指令集,所有平台上的JVM向上提高给JAVA字节码程序的接口完全相同,但向下提供适应不同平台的接口。
故规定了JVM的这样一个标准、让java跨平台成为了可能。
JRE包含JVM。
JVM是运行java程序的核心虚拟机。
JAVA语言严格区分大小写,有着严格的命名规范,如程序中关键字全部小写无需大写,类名第一字母大写,方法则
第一字母小写,包名全小写等。
除此之外,Java的方便之处还在于它的垃圾回收机制。
1.所谓垃圾回收只是针对内存资源,至于物力资源如数据库连接、IO读写等JVM无能为力,所有程序中需要显示释放
2.为了更快回收垃圾,可以将对象的引用变量设为null
3.垃圾回收具有不可预知性,即使调用了对象的finalize()System.gc()方法也不能确定何时回收,只是通知JVM而已
4.垃圾回收机制能精确标记活着的对象,能精确定位对象之间关系,前者是完全回收的前提,后者实现归并和复制等
5.现在JVM有多种不同的垃圾回收实现。
3.2安卓介绍
说到Android,大家的第一反应,肯定是手机,但其实安卓是一款操作系统,因为他经常用在手机上,所以很多人提到Android就自然联想到手机。
关于Android操作系统,是这样子的:
Android是Google公司,其实这一点,很多人都知道,但是有很多不知道,其实一开始Android不是由Google公司开发,Google只是在2005年的时候将它收购了,并且把它当成了一个重点的项目来做,成立相应的开发小组,一点点的将Android做大的。
它在战胜塞班之后,又赢来了一个强劲的对手,那就是苹果公司的ios系统了。
为了争夺市场,安卓平台也在不断的跟新中,目前安卓已经更新到了5.0了。
5.0正式推出以来,除了bug不断外,还是有很多亮点的。
它多了一些新的东西,像TapandGo,TapandGo,Doubletaptowake(双击唤醒设备),Doubletaptowake(双击唤醒设备)等等,这些新的特性,还是相当不错的。
从理论性角度来看,Android它是在linux系统的基础上进行开发的,但他不能成为Linux系统,它有自己的特色,Android平台一般具有如下的特性:
它允许重用和替换组建的应用程序框架,有专门的虚拟机。
基于webkit的内置浏览器,自定义2D的UI效果,内置数据库,支持GSM通话,支持各种多媒体文件格式,还有蓝牙,EDGE,3G和WIFI等硬件的支持,还有吩咐的开发调试环境。
总之,Android是一款非常不错的操作系统。
3.3Sqlite相关介绍
Sqlite是Android系统内置的一个轻量级的关系型数据库,它的运算速度十分的快,占用的资源也是非常的少,通常只需要几百K的内存,所以比较适合在移动设备上进行使用,sqlite支持标准的sql语法,只要你以前用过关系型的数据库,那么你就会很快上手sqlite。
3.4系统开发运行环境
操作系统:
winXP或者win7
开发环境:
Eclipse集成开发环境
开发工具:
SDK
开发语言:
JAVA语言
3.6本章小结
这一章内容主要介绍了进行基于安卓电子书阅读器的开发过程中所用到的编程语言JAVA的介绍,以及对安卓这一平台的介绍,让我们更加清晰的认识安卓开发。
第四章系统的分析和设计
4.1需求分析
对于一个阅读应用来说,它最重要的一点就是能够实现阅读的功能,不能出现经常崩溃的情况,它还需要一个较好的用户体验
1)点击应用的图标进入软件之后,会像目前市面上的许多软件一样,有一个欢迎的界面出现,然后进入主体的程序界面。
2)当用户第一次安装此款应用的时候,会提醒用户如何使用这一软件应用。
3)当用户点击确实之后,用于显示软件信息的Dialog消失,呈现软件的主界面,例如ireader阅读软件的书架界面,用于选择所看的图书。
也可以采用列表的形式进行本地书籍信息的显示。
4)当用户点屏幕中的图书信息时,软件就会跳转到该书籍的阅读界面,即文本内容的显示。
5)当然,在主体界面的时候,用户点击手机上的menu的物理按键,将会在界面的底部弹出相应的menu菜单,主要用于本地文件的选择导入,并伴随这其他相关的辅助功能。
6)在阅读界面的时候,可以进行翻页处理,使文字有规律的显示在屏幕上,方便阅读。
7)阅读过程中可以根据个人的需要,进行字体大小的调整。
8)关于本地导入功能,在点击本地导入按钮后,会进入其相应界面,通常可以按照手机自带的文件管理软件的界面形式进行显示,找到相应的文件后点击一样可以进入阅读状态,同时可以将该文件列入到书架之中,方便下次的阅读。
9)在书架界面中,可以对书籍信息长按进入长按菜单,在长按菜单中可以进行其他辅助功能的设计,方便对书架上的书籍进行有效的管理。
在设计这个项目时,总体的思路如下的流程图:
图4-1-1流程图
4.2模块的划分
在模块的划分方面,请参看图4-2所示的模块图:
图4-2-1总模块图
对这一整个项目做一个比较完整完善的分析只有,整个项目分成以下几个模块,亦如上图所示
1)书架模块:
用来放置已被应用读取过的符合要求的电子书文件,并显示给用户,以方便用户点击查看,及完成相应操作。
2)管理模块:
模仿市面上的电子书阅读软件,给每个电子书文件添加屏幕的长按点击事件,弹出相应的用于关于管理的对话框,对书架上的书籍进行有效的管理,主要管理功能包括删除选中的书籍,以及清理书架上所有的书籍。
3)导入模块:
用于选择导入SD卡中的符合电子书格式的文件,并加入书架之中,当选择导入已经导入过的文件时会给出文件已经在暑假上的提醒,防止书架上的图书资源出现重复,给阅读带来不便。
4)阅读模块:
显示文件的内容,即整个应用的核心部分。
要想显示txt文本内容,就必须了解txt文本格式的编码方式。
一般来说,txt文件常用的编码方式有很多,ASCII码,unicode码等。
若文件直接以数据开头,不包含头信息,那么txt文件就是ASCII编码形式;文件开头是FFFF的话,是unicode编码,而三字节开头的编码分为UTF-16BE编码和UTF-8编码,前者是以FEFF00开头,后者则是EFBBBF。
5)字体模块:
用于设置字体,方便用户据阅读,可以将设定字体大小的相应函数通过与seekbar进行数值绑定,然后可以通过拖拉seekbar实现字体大小的调整。
6)书签模块:
用于书签的管理。
主要通过记录当前页面的第一个字符与最后一个字符记录到数据库当中,在对书签进行管理的时候,对书签条目的操作,即使对书签数据库的操作。
4.3模块详细介绍
4.3.1书架模块
书架模块的主要用的是用于摆放被软件识别的书籍。
在这个书架的界面,可以针对这个一个界面来进行在书籍的名称的浏览,在通常的情况下,会将每一个扫描到得书籍一个item的形式放置在整个layout上面,而实现每一个item的放置,可以选择使用ListView或者是使用GridView,有了ListView组件之后,还需要对单个的item进行界面上的设计,按照ireader的界面做参考,每一个item会包含一个书籍封面感觉的图片资源,用来模拟真书摆放在真实书架位置上的效果,而在封面图片上面会有一个TextView,用来显示书籍的名字,方便用户进行书籍的选择。
因为选择的是ListView的原因,需要在每个Item上面会放置放置三个书籍的位置,而这三个组件共同构成一个Item。
关于存放书籍的组件,可以用三个textview存放,textview的文本用于显示书本的标题,并在该组件背后设置一张类似书籍封面的背景图片,让这一组件变得相对更像是一本书。
4.3.2管理模块
管理模块的主要作用显然就是管理整个书架了。
原本,在设计的初期并没想到设计一个比较实用的管理上的相应功能,在后续的开发过程中,方面导入图书之后,书籍就会在书架上面显示出来,而导入图书非常多的话,真个书架的上的书籍也会变的非常的多,原来实现书架功能的原因就是为了简洁与美观,书架上书籍一多,还是会影响到实用方便程度,考虑到这一点,可以增加一个管理的模块,用于管理书架上的图书资源,让整个画面画面更加的简洁明了。
考虑到上方所讲到的书架模块已经是一个Activity了,如果我们再使用Activity来设计这一个管理模块的话,从书架这一块通过itent跳转至管理的Activity,在完成相应的管理操作之后,修改数据库,再回去到书架界面,并且要对ListView上面的内容进行刷新。
这样一来,工作的量就会上去,而且软件的使用效率也受到很大的影响,而且严重影响到了使用的方便程度,所以在这里,我希望管理功能能书架这一个Activity上面完成,第一个想到得就是Dialog了,这边我们模仿ireader这一软件,在ListView上面进行一个长按的点击事件的设置,在相应的函数下方写一个Dialog,给Dialog几个相应的按钮,用来实现管理的主要功能,即删除书籍和清理书籍。
4.3.3导入模块
导入模块的主要功能是用于导入本地的书籍文件至书架。
宏观上来说,导入界面是用来显示sd卡路径,最常见的显示方式,就是类似与普通的文件管理应用那样,以ListView的形式来进行显示,listview会将每一层路径下的所有的内容都显示在item上面,通过点击文件夹对应的item进入下一层路径,通过点击返回按钮,返回至当前路径的上一层。
当有Txt文本格式的item出现,我们只要点击,就能进入该文本的阅读界面,并且这一文本会以事先约定的形式,显示在书架上,同时也会修改书架对应数据库的数据。
4.3.4阅读模块
显然,阅读模块只要的主要功能就是用显示文本的内容了,在这一模块之中,最重要的部分就是能够显示文字,而进行txt文本内容显示,首先要确定txt文本的编码方式,txt文本的最常见编码方式有ASCII编码,unicode编码,UTF-16BE,UTF-8等,所以在编写应用的时候,需要根据各种编码的规则用一个if对读入的文本进行编码方式的判定,让其能够正常显示文本的内容,不至于出现由于解码不对出现乱码而影响正常的文字阅读。
除了解决了txt的解码工作之后,还需要解决的问题的就是文本的分页功能,因为txt文本阅读器通常情况下是用来阅读小说,或者其他内容非常多的文件,把这些文字显示在同一个屏幕是不可能的,所以这时候的分页功能就显得十分的重要了。
就对当前市面上的电子书阅读软件研究来看,用滚动条的形式来做文字下拉,来进行不同版面的文字显示是很不方便的,操作起来十分的不舒服,会影响到阅读的舒适程度,这时候的触碰翻页功能就显得非常的重要了。
在常见的软件应用中,翻页功能会伴随着一些翻页动画,不同的翻页动画,对应的算法也是不一样的,如果我们不使用翻页动画的,会选择触摸一下屏幕跟换文字的内容,这样一来我们只需要一个加布就可以了。
而如果我们选择平滑的方式的话,就可能在同一时间内,出现两个不同页面的文字内容,很显然这是我们需要两张画布,用来分别绘制不同页面上的文字。
在选择模拟翻页动画形式的翻页实现时,我们会用到三个画布,两张用于绘制不同页面的文字,另一张用于绘制纸张的背面。
在这一样项目中,我选择了模拟真书翻页的效果,在对三张画布进行具体位置划分时我们会需要到一条平滑的曲线,或者一条直线,为了更好的视觉效果,我选择了贝塞尔曲线,然后通过一系列的数学方法求的整块区域上的各个点的坐标,然后绘制画布。
4.3.5字体模块
字体模块的主要功能就是用以调整在阅读过程中的是字体的大小。
在阅读界面时,通常手机物理按键的Menu菜单会设置相应的事件,显示对应的菜单项,在点菜单项内容后,显示相应的字体模块的界面。
这一模块相对来说还是比较简单的,在阅读中,显示文本内容是通过drawtext来实现的,在这里通常会涉及到画笔工具,通过调整画笔工具的大小,从来绘制出的字体大小也是不一样的,而画笔工具大小是支持动态调整,的,因为实现字体大小就是只需要写一个函数动态控制画笔工具的大小,然后对画面进行刷新重绘就可以了。
4.3.6书签模块
书签的功能主要作用当然是记录阅读的状态,所以该模块必定是在阅读模块的基础上实现,在阅读的过程中通过menu菜单的方式显示,当点书签相关的按钮后,可以弹出一个全充的dialog,在dialog里面放置一个listview用以放置书签条目。
在具体书签功能实现时,通过对当前页面前几个文字内容进行记录,并记录当前页面的第一个字是文本的第几个字,用于定位。
得到这些信息之后,将这些信息内容存进数据库,在显示书签时,通过对数据库进行读取,来讲书签内容显示出来。
4.3.7主要技术难点分析
在这一整个项目中,会涉及到非常的内容显示的功能,包括书架的显示,目录的显示,以及书签的显示,这里的条目显示的功能都是同listview进行实现的。
而listview也是android中最常用的组件之一,同时也是一个比较难的组件,因为他的使用涉及到适配器的写法。
一般来说,我需要显示在item当中的内容一般不会是非常的简单的字符串,一般情况下单独item的内容就需要用一个layout来进行设计,当然item越复杂,适配器就越发的难些。
虽说listview比较难用,但是它整体上的用法都是一致的。
首先创建listview组件,接着也是最重要的adapter的编写,正确编写玩adapter之后,就要在活动的oncreate方法中为listview组件创建并关联适配器,当能正常显示之后,便可以调用setOnItenmClickListener方法为item设置事件监听,用以相应相应操作
4.4本章小结
本章对电子书阅读软件进行了需求分析,在需求分析的基础