版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京信息职业技术学院毕业设计论文作者梁泽允学号90916P28系部计算机与软件学院专业软件技术(移动应用开发)题目基于Android的电子书阅览器的设计与实现指导教师李维勇评阅教师完成时间:2021年5月15日毕业设计(论文)中文摘要题目:基于Android的电子书阅览器的设计与实现摘要:随着生活节奏的加快和技术的开展以及移动设备的普及,特别是Android正以前所未有的速度开展,越来越多的创意被应用到Android应用程序的开发中。本设计是基于Android开发环境而设计的,采用Java语言、设计了一款基于SQLite数据库的Android电子书阅读器。本文首先阐述了电子书阅览器的工程的背景及其工程的研究意义,然后对电子阅览器的系统进行需求分析,主要是通过用例图对系统需求进行解析;其次是系统的总体设计,总体设计分为功能模块的设计、数据库的设计,功能模块的设计利用系统流程图和时序图对模块设计进行解析;第三局部是对系统的总体设计,此局部主要是对各模块功能是如何实现的和一些实现的重要代码做详细的说明;最后一局部是对系统进行测试,通过设计测试案例和如何来对功能测试进行描述来完成测试,书写测试结果。论文给出基于Android开发的电子书阅览器的开发实例,主要的功能有在SDCard中找书;给书添加书签、选择书签、清空书签;设置读书时候的自动翻页的时间;设置文字的大小、颜色、书的背景图片和背景音乐。不仅简单方便,还给用户带来很好的阅读体验。关键词:Android电子书阅览器毕业设计(论文)外文摘要Title:Abstract:Withtheacceleratedpaceoflifeandtechnologyexhibitionandthemobilephonepopularityofmobiledevices,particularlyAndroidisahithertounknowninthespeedofdevelopment,moreandmoreideasareappliedtotheAndroidapplicationdevelopment,thedesignisadesignbasedonAndroidelectronicreadingdevicerealize.ThedesignisbasedontheAndroiddevelopmentenvironmentanddesign,usingJavalanguage,designaSQLdatabase.Thisarticlefirstelaboratedtheelectronicreadingdeviceoftheprojectbackgroundandresearchsignificance,andthentheelectronicreadingdeviceofthesystemneedsanalysis,primarilythroughtheusecasediagramofsystemdemandanalysis;thesecondistheoveralldesignofthesystem,theoveralldesignisdividedintothefunctionmoduledesign,databasedesign,functionmoduledesignutilizationsystemflowdiagramandsequencediagramofmoduledesignanalysis;thethirdpartoftheoveralldesignofthesystem,thispartismainlyonthefunctionofeachmodulecanbeimplementedandachievedsomeimportantcodetodothedetailedexplanation;thelastpartiscarriesonthetesttothesystem,throughthedesignoftestcaseandhowtofunctiontestdescriptionoftest,writtentestresults.Thispapergivetheelectronicreadingdevicedevelopmentexample,themainfunctionisfoundinthesdcardbook;giveabookaddbookmarks,choosetobookmark,emptythebookmark;whentheautomaticpageturningtime;setthesizeofthefont,color,thebackgroundpictureandbackgroundmusic.Notonlyissimpleandconvenient,backtothegoodoftheuserexperienceofreading.keywords:AndroidElectronicreadingReadingdevice目录TOC\o"1-2"\h\z\u1 绪论 11.1 课题的背景 11.2 工程的研究意义 21.3 系统的主要技术 22 需求分析 92.1 应用需求分析 92.2 开发环境与工具 133 系统总体设计 153.1 功能模块设计 153.2 数据库设计 174 系统详细设计与实现 194.1 欢迎界面的实现 194.2 找书功能的实现 204.3 书签功能模块的实现 214.4 设置功能模块的实现 255 测试 295.1 系统测试 295.2 系统运行 33结论 36致谢 37参考文献 38绪论传统的电子书阅读器是将要读取的内容转成txt格式的文件,通过文件流读出,并在相应的控件上进行显示。但这只适用于一些内容短小的文本,对于一些内容庞大复杂的文本,如各类文学名著等,因其分卷多,每卷中又有章、章中又有节,简单的阅读器显然不能满足翻页、查找等功能。而本设计即可实现翻页、查找等功能而且具有操作简单、界面友善、灵活性好、系统平安性高、运行稳定等特点。课题的背景电子书阅览器是现在青少年以及中年人不可缺少的,然而普通的阅览器满足不了现在青少年的阅读体验,本设计就是从这点出发,尽可能的满足除阅读功能之外还具有其它特效功能,给用户一个更好的阅读体验。普通的阅读器只是具有阅读电子书的功能。用户在阅读的过程中可能会有点枯燥乏味而影响阅读的心情,还有可能因为系统自身的局限性不能对很大的文字进行加载阅读。基于以上的原因本设计的电子书阅读器的阅读界面一般设计依旧比较简洁,没有复杂的导航条,简洁的界面增强了阅读的真实感,隐藏的菜单栏为阅读器提供了丰富的功能支持,让使用者在充分享受类似阅读纸质图书快乐的同时体验到应用的酷炫的效果。因为是基于Android的开发,本设计的平安性、运行的稳定性更好;该设计不仅界面的上优化,本设计还具有对阅读文章进行添加书签功能,更好的方便用户下次阅读重新翻阅的功能;在智能化方面,本电子阅览器可以自动翻页,可根据个人阅读的快慢进行设置,大大减少了客户在阅读时需要手动翻页的烦恼;在阅读体验方面,本设计更是突出它优越的特点,不仅可以对字体颜色、大小进行调节,还可以更换阅读的背景图片及对背景音乐进行设置,这样大大给用户带来了阅读时候的愉悦感。本文主要阐述了在Android平台上十分流行的电子书阅读器的设计与实现,具有在SDCard中找书,自动翻页特效,给电子书添加书签,阅读字体调节,背景图片和音乐的实现等功能,本文详细讨论了应用程序的系统逻辑结构,体系结构,功能模块和设计流程,以及实现该设计的代码。最后是对该设计进行测试的工作。工程的研究意义随着人们生活节奏的不断加快,以其方便快捷的优点,逐渐成为人们日常生活必不可少的通讯工具。随着人们对娱乐功能要求的不断提高,各种应用软件层出不穷,其中基于Android平台电子书阅览器软件的开发可以进一步满足青少年,能够帮助人们更加合理地利用时间,在休闲娱乐的同时获取知识,成为用户生活的小助手,有很大的市场价值。系统的主要技术系统设计主要用的技术有Android,Java语言、SQLite数据库的使用。在软件的开发过程中运用到的集成开发环境是Eclipse。在软件的设计过程中运用UML的用例对系统进行分析。Android简介Android一词的本义指“机器人〞,同时也是Google于2007年11月5日宣布的基于Linux平台的开源操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。2021年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2021年2月数据,Android占据全球智能操作系统市场52.5%的份额,中国市场占有率为68.4%。Android是以Linux为核心的操作平台,作为一款开放式的操作系统,随着Android的快速开展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程〔如:python、lua、tcl、php等等〕,还有其他诸如:Qt〔qtforandroid〕、Mono〔monoforandroid〕等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2021年特别发布了针对初学者的AndroidSimple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。而在Android系统底层方面,Android使用C/C++作为开发语言。Android系统的优势:〔1〕开放性在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商参加到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开发性对于Android的开展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的。〔2〕挣脱运营商的束缚在过去很长的一段时间,特别是在欧美地区,应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,随意接入网络已不是运营商口中的笑谈。〔3〕丰富的硬件选择这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。〔4〕不受任何限制的开发商Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。〔5〕无缝结合的Google应用如今叱咤互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google效劳如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台将无缝结合这些优秀的Google效劳。Android系统架构:Android的系统架构和其它操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。图1-1Android系统架构图〔1〕应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。〔2〕应用程序框架开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的平安性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。〔3〕系统运行库1)程序库Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供效劳。以下是一些核心库:系统C库:一个从BSD继承来的标准C系统函数库(libc),它是专门为基于embeddedlinux的设备定制的。媒体库:基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。SurfaceManager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。SGL:底层的2D图形引擎。3Dlibraries:基于OpenGLES1.0APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。FreeType:位图(bitmap)和矢量(vector)字体显示。SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。2)Android运行库Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。由Dalvik虚拟机和根底的java类库组成。〔4〕Linux内核Android的核心系统效劳依赖于Linux2.6内核,如平安性,内存管理,进程管理,网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。Android系统的四大组件:在Android系统中,为我们提供了四大根本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。下面分别介绍四大组件:〔1〕Activity简介在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈〔Stack〕,当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。〔2〕Service简介顾名思义Service就是运行在后台的一种效劳程序,一般很少和用户交互,因此没有可视化界面定义一个Service类比较简单,只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件注册,通过<service>元素声明才能使用.Service有自己的生命周期,我们可以调用startService()启动一个Service或者bindService()方法来绑定一个存在的Service。〔3〕BroadcastReceiver简介BroadcastReceiver顾名思义播送接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的〔例如,某个按钮的单击事件〕,而播送事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件播送来传递消息。我们可以在你的应用程序中实现BroadcastReceiver来监听和响应这些播送的Intent。〔4〕ContentProvider简介ContentProvider用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。Android为常用的数据类型〔如:音视频、图片和联系方式等〕提供了大量的ContentProvider。它们被定义在vider包下面。通过这样定义好的ContentProvider我们可以方便的进行数据操作。当然我们必须拥有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问。Java技术Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台〔即JavaSE,JavaEE,JavaME〕的总称。Java技术具有卓越的通用性、高效性、平台移植性和平安性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针〔以引用取代〕、运算符重载〔operatoroverloading〕、多重继承〔以接口取代〕等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。而且不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码〔bytecode〕,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行〞的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量〞是Sun公司的口号之一,并获得了广阔软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Java语言有以下特点是简单的、是一个面向对象的、是分布式的、是健壮的、是平安的、是体系结构中立的、是可移植的、是解释型的、是高性能的、是多线程的,是动态的。UML简介UML是一种面向对象的建模语言,它是运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。UML又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。面向对象的分析与设计方法的开展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的开展,并最终统一为群众所接受的标准建模语言。〔1〕UML中的图例第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。第二类是静态图,包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构〔类的属性和操作〕。对象图是类图的实例一个对象图是类图的一个实例。包图用于描述系统的分层结构。第三类是行为图〔Behaviordiagram〕,描述系统的动态模型和组成对象间的交互关系。行为图包括:状态图、活动图、顺序图和协作图。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。顺序图展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。用顺序图说明系统的动态视图。协作图展现了一组对象,这组对象间的连接以及这组对象收发的消息。第四类是交互图〔Interactivediagram〕,描述对象间的交互关系。第五类是实现图(Implementationdiagram)。用来描述系统实现方面的信息。它从系统的层次描述硬件的组成和布局、软件系统的划分和功能实现。〔2〕UML的应用领域UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统〔用例〕的功能要求。分析阶段主要关心问题域中的主要概念〔如抽象、类和对象等〕和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间需要协作,这可以用UML动态模型来描述。在分析阶段,只对问题域的对象〔现实世界的概念〕建模,而不考虑定义软件系统中技术细节的类〔如处理用户接口、数据库、通讯和并行性等问题的类〕。这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详细的规格说明。需求分析根据设计的目标,我们可获得系统的根本需求,以下从应用需求分析并且使用用例图来描述系统的功能需求。应用需求分析本模块结合UML用例图来对应用需求分析中功能需求和性能需求进行分析。功能需求功能需求主要是为了明确所开发软件必须具备的功能,本设计的电子书阅览器对给用户提供方便的操作和阅读上的体验扮演着正要的角色。电子书阅览器根本的功能需求如下:〔1〕图书以列表的形式显示在SDCard中,并支持从SDCard中选择txt图书。〔2〕当用户点击某一本电子书之后,可以进入阅读界面对字体的大小、颜色、背景图片、背景音乐等特效进行设置。〔3〕当用户感觉到手动的翻页比较麻烦的时候,可以设置自动翻页,设置自动翻页的时间等。〔4〕当用户有事把图书暂放一边的时候,可以对自己阅读到的章节进行添加书签,方便下次的阅读。根据功能需求本设计的电子书阅览器的功能包括以下几局部:〔1〕找书功能用户通过对菜单项选择项中的找书按钮进行操作,即可以从SDCard中选择图书进行阅读。〔2〕书签功能书签功能即为了实现用户下次阅读的方便而设计的。当用户点击菜单“书签〞按钮时候,可以选择“添加书签〞对读到的章节进行添加书签进行标记。〔3〕自动翻页功能用户点击菜单“自动翻页〞按钮,可以选择自动翻页的时间,具体时间包括30S、40S、50S,也可以取消自动翻页功能。〔4〕设置功能设置功能主要的目的是为了方便用户的阅读体验,设置功能主要包括:设置字体大小,分为大号、中号、小号;设置字体的颜色,用户可以根据自己的需求进行选择;设置背景图片,使用户有更好的阅读视觉;设置背景音乐。性能需求软件要有良好的用户体验,良好的用户体验表达在以下几个方面:(1)界面友好用户界面要简洁直观,设计合理,方便用户操作,让用户操作起来比较舒服。(2)快速响应快速处理用户的输入或请求,对于需要长时间处理的局部,在其处理时可以给用户一个提示,告知用户该软件正在运行。(3)无缝性一个常见的无缝问题就是一个应用的后台进程对某事件作出响应而弹出对话框,这看起来仿佛并无大碍,特别是当你在模拟器上单独地构建和测试你的应用时。然而,当你的应用在真正的设备上运行,后台线程显示对话框时,你的应用当时可能没有获得用户焦点。这就会出现你的应用会在活动的应用后面显示对话框,或者从当前应用中获得焦点并显示对话框的情况,而管论当时用户正在做什么〔如正在打等〕。那样的行为可能对你的应用或用户不起作用。用例分析用例分析主要是结合UML用例图来对功能需求进行分析,主要来分析该设计的根本功能和以及对电子书管理需求。〔1〕电子书阅览器的根本功能电子书阅览器的根本功能主界面用例图如下:图2-1电子书阅览器的根本功能主界面表2-1找书用例名称:找书参与者:用户目标:用户可以从电子书列表中找到电子书前置条件:电子书阅览器以启动根本领件流:从电子书列表中选择书表2-2书签用例名称:书签参与者:用户目标:当用户不读电子书时可以加上书签对下次阅读起到方便作用前置条件:有已经翻开的电子书根本领件流:点击书签按钮给文章参加书签表2-3自动翻页用例名称:自动翻页参与者:用户目标:设置自动翻页的时间及取消自动翻页前置条件:无根本领件流:设置自动翻页的时间、取消自动翻页表2-4设置用例名称:设置参与者:用户目标:设置字体大小颜色、设置背景音乐图片,到达用户读电子书心情更好前置条件:无根本领件流:设置背景音乐、背景图片、字体颜色、字体大小〔2〕电子书的管理需求电子书的管理需求的用例图如下:图2-2电子书阅览器的管理需求表2-5从SDCard中找书用例名称:从SDCard中选书参与者:用户目标:用户进入SDCard中从电子书列表中找到电子书前置条件:SDCard中有电子书根本领件流:从电子书列表中选择书表2-6添加书签/选择书签/清空书签用例名称:添加书签/选择书签/清空书签参与者:用户目标:当用户不读电子书时可以加上书签,下次阅读时清空书签。对阅读起到方便作用前置条件:有已经翻开的电子书根本领件流:点击书签按钮给文章参加书签表2-7选择自动翻页的时间用例名称:选择自动翻页的时间参与者:用户目标:选择自动的翻页时间前方便用户的阅读前置条件:无根本领件流:设置自动翻页的时间、取消自动翻页表2-8设置背景音乐/背景图片用例名称:设置背景音乐/背景图片参与者:用户目标:在读电子书的时候可以有背景音乐和背景图片,使读者心情更愉快前置条件:无根本领件流:设置背景音乐、背景图片表2-9字体大小/字体颜色用例名称:字体大小/字体颜色参与者:用户目标:方便用户阅读前置条件:无根本领件流:设置字体大小、颜色开发环境与工具本设计是基于Android平台的,Android平台为开发者提供了源码开放的软件开发包(SDK),它包含了使用Java语言开发Android平台应用的必要工具和组件(API)。进行开发前先要建立适宜的开发环境,其中基于Java的整合型可扩展平台Eclipse是我们的首选。〔1〕搭建环境所需要的软件:操作系统:Windows7;软件包:AndroidSDK,ADT;IDE环境:EclipseIDE+ADTEclipse3.3以上;JDK:JavaRuntimeEnvironmcnt,JDK;〔2〕安装步骤:安装JDK然后配置环境变量;安装Eclipse;〔3〕AndroidSDK配置/安装:首先在:///sdk/index.html下载,选择相应的系统进行安装;〔4〕安装AndroidADT插件:翻开Eclipse,在导航菜单中选择Help-InstallNewSoftware。在workwith中输入s://dl-ssl.google/android/eclipse/ADD然后输入name,随便取个有意义的,都选中安装,完毕后重启Eclipse。在Eclipse里配置SDK路径,选择Windows->Preferences->Android,选择AndroidSDK的位置。系统总体设计功能模块设计功能模块图经过对市场调研以及需求分析可知,本案例主要包括书目的查找模块、自动翻页模块、书签管理模块和文本属性设置模块,其功能模块图如下:图3-1电子阅览器的功能模块图其具体的功能如下:从SDCard找书。用户可以吧下载好的文本放到SD卡中,就可以从SD卡中读取你需要阅读的文本,以满足用户多方位的阅读需求,增强本案例的实用性。翻页功能。用户可以根据需求选择自动翻页功能,每30秒,或者更长时间来自动翻页,增强用户的阅读体验,方便阅读。书签功能。用户可以根据自己的需求,为所阅读的文本添加书签,方便下次阅读,也可以选择删除不再需要的书签,或同时删除所有书签。系统设置。用户可以根据自己的需求,更改字体的颜色,字体大小以及背景图片,来满足实际应用中的多重需求。同时,用户可以选择在阅读时播放音乐。系统流程图当用户使用该电子阅览器是,首先启动阅览器后个欢迎界面,其次是电子书的阅读界面,如果是重新选择另外一本电子书这时候需要在菜单找书按钮中选择从SDCard中找书即可实现换读另外书籍;如果选择继续阅读的话就可以继续阅读,可以对该阅读界面进行一些操作和设置如设置是否自动翻页、设置字体的大小、背景图片、背景音乐等等。还可以对该阅读界面添加书签以便下次方便阅读。图3-2系统流程图系统时序图时序图它是通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。本设计的时序图如下:当用户执行翻开阅读界面这个用例的时候,可以选择继续阅读,也可以选择从SDCard中重新加载另外一本书。下面用户可以对该篇电子书进行相关的操作设置自动翻页、设置字体大小、颜色、背景图片、背景音乐等。当用户执行完这个用例的时候,可以对读到的小说章节参加书签,以便下次阅读的方便。图3-3系统时序图数据库设计本案例的书签功能涉及了数据库的使用,下面介绍数据库的E-R图,通过数据库的E-R图可以了解到各个实体的属性,方便读者对于后面数据库的理解,数据库E-R图如图3-4所示。概念结构设计在数据库的E-R图中BookRecord表示的是阅读记录表,其具体属性信息为阅读记录的ID、书的路径和阅读时记录的数据,其中阅读记录的ID为本表的主键;BookMark表示的是书签表,其具体的属性信息为书签的ID、书签对应的阅读的阅读记录的ID、书签名和书页号,其中书签的ID为表的主键,书签对应的阅读记录的ID为表BookRecord中ID的外键;LastTimePage表示的是上次阅读的记录表,其具体属性信息为上次阅读记录的ID、书的路径、上次阅读的页数和上次阅读时字体大小。以下图为书签功能的E-R图:图3-4书签功能的E-R图逻辑结构设计〔1〕阅读记录表。该表用于记录阅读记录的ID、书的路径和阅读时记录的数据,具体如表所示表3-1阅读记录表字段名称数据类型字段类型是否主键说明ridInteger8是阅读记录的IDpath文本50否书的路径data字节组数不定否阅读记录数据〔2〕书签表。用来记录书签的ID、书签对应阅读记录的ID、书签名和书页号如以下图:表3-2书签表字段名称数据类型字段大小是否主键说明midInteger8是书签的IDridfkInteger8否书签对应阅读记录的IDbmname文本50否书签名pageInteger8否书页〔3〕上次阅读的记录。该表记录上次阅读的ID、书的路径和上次阅读的页数,如以下图:表3-2上次阅读记录表字段名称数据类型字段大小是否主键说明libInteger8是上次阅读记录的IDpath文本50否书的路径pageInteger8否上次阅读的页数fontsizeInteger8否上次阅读时字体大小系统详细设计与实现欢迎界面的实现在本节主要介绍的是阅读器欢迎界面类WellcomeSurfaceView的开发。该类完成了“电子阅览器〞和“梁泽允制作〞的渐变显示效果,在进入程序界面时首先调用,其欢迎界面如下。图4-1欢迎界面图在进入程序界面时首先调用,其代码的实现如下:publicclassWelcomeSurfaceextendsSurfaceViewimplementsSurfaceHolder.Callback{ReaderActivityactivity;Paintpaint; intcurrentAlpha=0;intsleepSpan=50;Bitmap[]logos=newBitmap[2];BitmapcurrentLogo;intcurrentX;intcurrentY;publicWelcomeSurface(ReaderActivityactivity){super(activity);this.activity=activity;this.getHolder().addCallback(this);paint=newPaint();paint.setAntiAlias(true);logos[0]=BitmapFactory.decodeResource(activity.getResources(),R.drawable.dukea);logos[1]=BitmapFactory.decodeResource(activity.getResources(),R.drawable.dukeb);}publicvoidonDraw(Canvascanvas){paint.setColor(Color.BLACK);paint.setAlpha(255);canvas.drawRect(0,0,Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT,paint);if(currentLogo==null)return;paint.setAlpha(currentAlpha);canvas.drawBitmap(currentLogo,currentX,currentY,paint);}publicvoidrun(){for(Bitmapbm:logos){currentLogo=bm;currentX=Constant.SCREEN_WIDTH/2-bm.getWidth()/2;currentY=Constant.SCREEN_HEIGHT/2-bm.getHeight()/2;for(inti=255;i>-10;i=i-10){currentAlpha=i;if(currentAlpha<0){currentAlpha=0;}SurfaceHoldermyholder=WelcomeSurface.this.getHolder();Canvascanvas=myholder.lockCanvas();}}找书功能的实现找书就是在SDCard中找书,用户可以将已有的txt格式的书放在SDCard中,通过本阅读器的在SDCard中找书的功能,将书加载进阅读器进行阅读。此项功能具体开发步骤如下:〔1〕菜单找书按钮的开发,在开发具体功能之前,要先对菜单按钮添加监听器,其代码如下:publicbooleanonCreateOptionsMenu(Menumenu){MenuItemsearch=menu.add(0,0,0,R.string.search);search.setIcon(R.drawable.m_search);OnMenuItemClickListenersearchbook=newOnMenuItemClickListener(){publicbooleanonMenuItemClick(MenuItemitem){showDialog(LIST_SEARCH);returntrue;}};search.setOnMenuItemClickListener(searchbook);returntrue;}〔2〕在SDCARD中找书方法的实现。该方法主要负责根据当前路径获得对应的文件组,并将数组中所有的所有文件参加到文件列表中,其具体代码如下:publicvoidonClick(Viewv){if(lvutills.currentPath.equals("/sdcard")){Toast.makeText(ReaderActivity.this,"已经到根目录了",Toast.LENGTH_SHORT).show();}else{Filecf=newFile(lvutills.currentPath);cf=cf.getParentFile();lvutills.currentPath=cf.getPath();oListView(lvutills.getFiles(lvutills.currentPath),lv); }}〔3〕将各个文件添加到ListView列表中,其具体代码如下:publicvoidintoListView(finalFile[]files,finalListViewlv){if(files!=null){if(files.length==0){Filecf=newFile(currentPath);cf=cf.getParentFile();currentPath=cf.getPath();Toast.makeText(reader,"该文件夹为空!!",Toast.LENGTH_SHORT).show();}else{BaseAdapterba=newBaseAdapter(){publicintgetCount(){returnfiles.length;}}}}publicObjectgetItem(intposition){returnnull;}publiclonggetItemId(intposition){return0;}}书签功能模块的实现在本节会详细的介绍书签中自定义Dialog、长按书签中的某一项删除书签、单击书签中某一项跳转等功能的实现。添加书签功能的实现读者可能会发现,书签功能中很多漂亮的Dialog,这些Dialog是通过xml文件自己布局的或者通过Java代码实现的,在这一节中将会介绍自定义Dialog。〔1〕MyDialog类的开发。编写自定义的Dialog需要定义一个继承Dialog的类,这个类中确定了将要开发的布局文件,规定了Dialog的属性,把布局文件和Java代码有机地联系起来,实现代码如下:publicclassMyDialogextendsDialog{publicMyDialog(Contextcontext){super(context,R.style.FullHeightDialog);}publicvoidonCreate(BundlesavedInstanceState){this.setContentView(R.layout.bookmark_input);}}〔2〕创立输入对话框,并且实现其监听的方法publicDialogonCreateDialog(intid){Dialogdialog=null;switch(id){caseLIST_BOOKMARK:b=newAlertDialog.Builder(this);b.setIcon(R.drawable.m_bookmark);b.setTitle(R.string.bookmark);b.setItems(R.array.bookmark,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){switch(which){case0:showDialog(NAME_INPUT_DIALOG_ID);break;case1:try{haveBookMark=SQLDBUtil.judgeHaveBookMark(Constant.FILE_PATH);}catch(Exceptione){e.printStackTrace();}if(haveBookMark){showDialog(SELECT_BOOKMARK);}else{Toast.makeText(ReaderActivity.this,"请先添加书签",Toast.LENGTH_SHORT).show();}break;case2:showDialog(DELETE_ALL_BOOKMARK);break;}}});dialog=b.create();break;caseNAME_INPUT_DIALOG_ID:dialog=newMyDialog(this);break;caseSELECT_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseEXIT_READER:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseDELETE_ONE_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;caseDELETE_ALL_BOOKMARK:b=newAlertDialog.Builder(this);b.setItems(null,null);dialog=b.create();break;returndialog;}选择书签功能的实现在上一小节的onCreateDialog方法中提到了选择书签对话框,在本小节中,将会对其进行详细的介绍,选择书签对话框不听添加对话框,是用Java代码实现的,其详细介绍如下:选择书签对话框时通过Java代码实现的。通过这一小节的学习,读者可以学会如何运用Java代码编写自定义对话框。实现代码如下:caseSELECT_BOOKMARK:try{dataBaseBookMark=SQLDBUtil.getBookmarkList(Constant.FILE_PATH); inti=0;tempname=newString[dataBaseBookMark.size();temppage=newint[dataBaseBookMark.size();for(BookMarkdataBookMark:dataBaseBookMark){tempname[i]=dataBookMark.bmname;temppage[i]=dataBookMark.page;i++;}}catch(Exceptione){e.printStackTrace();}LinearLayoutll=newLinearLayout(ReaderActivity.this);ll.setOrientation(LinearLayout.VERTICAL);ll.setGravity(Gravity.CENTER_HORIZONTAL);ll.setBackgroundResource(R.drawable.dialog);LinearLayoutlln=newLinearLayout(ReaderActivity.this);lln.setOrientation(LinearLayout.HORIZONTAL);lln.setGravity(Gravity.CENTER);lln.setLayoutParams(newViewGroup.LayoutParams(200,LayoutParams.WRAP_CONTENT));TextViewtvTitle=newTextView(ReaderActivity.this);tvTitle.setText(R.string.bookmark_dialog);tvTitle.setTextSize(20);tvTitle.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));lln.addView(tvTitle);ll.addView(lln);ListViewlv=newListView(this);lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);BaseAdapterba=newBaseAdapter(){publicintgetCount(){returntempname.length;}publicObjectgetItem(intarg0){returnnull;}publiclonggetItemId(intarg0){return0;}publicViewgetView(intarg0,Viewarg1,ViewGrouparg2){LinearLayoutllb=newLinearLayout(ReaderActivity.this);llb.setOrientation(LinearLayout.HORIZONTAL);llb.setPadding(5,5,5,5);ImageViewimage=newImageView(ReaderActivity.this);image.setImageDrawable(ReaderActivity.this.getResources().getDrawable(R.drawable.sl_bookmark));image.setScaleType(ImageView.ScaleType.FIT_XY);image.setLayoutParams(newGallery.LayoutParams(30,30));llb.addView(image);TextViewtv=newTextView(ReaderActivity.this);tv.setGravity(Gravity.LEFT);tv.setText(tempname[arg0]+""+"第"+String.valueOf(temppage[arg0]+1)+"页");tv.setTextSize(20);tv.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));tv.setPadding(0,0,0,0);llb.addView(tv);returnllb;}}lv.setAdapter(ba);设置功能模块的实现设置字体大小功能的实现在前面的软件功能结构这一节中,提到了设置字体大小的功能。从本节开始,将会详细的介绍字体的大小对话框功能的实现。字体大小的对话框与选择书签对话框的做法根本相同,也是通过Java代码为对话框中的控件的摆放形式设置布局,由于其与选择书签的对话框类似,这里只介绍字体大小对话框的监听事件,实现代码如下:publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){switch(arg2){case0:if(Constant.TEXT_SIZE!=16){Constant.TEXT_SIZE=16;Constant.TEXT_SPACE_BETWEEN_CN=16;Constant.TEXT_SPACE_BETWEEN_EN=8;Constant.changeRatio();updataBookMarkAndHashMap();}break;case1:if(Constant.TEXT_SIZE!=24){Constant.TEXT_SIZE=24;Constant.TEXT_SPACE_BETWEEN_CN=24;Constant.TEXT_SPACE_BETWEEN_EN=12;Constant.changeRatio();updataBookMarkAndHashMap();}break;case2:if(Constant.TEXT_SIZE!=32){Constant.TEXT_SIZE=32;Constant.TEXT_SPACE_BETWEEN_CN=32;Constant.TEXT_SPACE_BETWEEN_EN=16;Constant.changeRatio();updataBookMarkAndHashMap();}break;}}更换背景图片以及设置字体颜色上一节详细介绍了设置字体大小更能的开发,为了丰富阅读的体验,本案例还具有更换背景图片的功能,在本节将详细介绍。〔1〕自定义对话框配置文件的设置为了应用界面更加美观、实用,需要自定义对话框来满足本应用的开发,本小节将主要讲解自定义对话框配置文件的设置,下面的styles.xml文件设定了Dialog的背景图片和标题格式,并设定对话框的属性。<?xmlversion="1.0"encoding="utf-8"?><resources><style name="FullHeightDialog"parent="android:style/Theme.Dialog"><itemname="android:windowNoTitle">true</item><itemname="android:windowBackground">@drawable/dialog</item></style></resources>〔2〕更换背景图片功能的实现下面详细介绍更换背景图片的具体功能实现过程:publicvoidonClick(Viewv){Constant.BITMAP=drawableIds[0];readerView.bmBack=PicLoadUtil.LoadBitmap(readerView.getResources(),BITMAP);readerView.bmBack=PicLoadUtil.scaleToFit(readerView.bmBack,PAGE_WIDTH,PAGE_HEIGHT);readerView.currRR=newReadRecord(CURRENT_LEFT_START,0,CURRENT_PAGE);readerView.bmLeft=readerView.drawPage(readerView.currRR);readerView.bmRight=readerView.drawPage(readerView.currRR);readerView.repaint();dialog.cancel();}〔3〕设置字体颜色功能的实现详细设计过程代码如下:publicvoidonClick(Viewv){Constant.COLOR=0xff000000;readerView.currRR=newReadRecord(CURRENT_LEFT_START,0,CURRENT_PAGE);readerView.bmLeft=readerView.drawPage(readerView.currRR);readerView.bmRight=readerView.drawPage(readerView.currRR);readerView.repaint();dialog.cancel();}背景音乐播放功能的实现上一小节详细介绍了更换背景图片、设置字体颜色的实现,为了丰富阅读的经验,增加阅读的乐趣,本案例还具有播放背景音乐的功能,在本节中将详细介绍。〔1〕创立对话框为了满足用户多方位的需求,需要做出更漂亮,更实用的对话框,本小节将详细介绍另一种自定义对话框的实现。实现方法如下:publicvoidsetBackgroundMusicDialog(finalDialogdialog){LinearLayoutll=newLinearLayout(ReaderActivity.this);ll.setOrientation(LinearLayout.VERTICAL);ll.setGravity(Gravity.CENTER_HORIZONTAL);ll.setBackgroundResource(R.drawable.dialog);LinearLayoutlln=newLinearLayout(ReaderActivity.this);lln.setOrientation(LinearLayout.HORIZONTAL);lln.setGravity(Gravity.CENTER);lln.setLayoutParams(newViewGroup.LayoutParams(200,LayoutParams.WRAP_CONTENT));TextViewtvTitle=newTextView(ReaderActivity.this);tvTitle.setText(R.string.music_name);tvTitle.setTextSize(20);tvTitle.setTextColor(ReaderActivity.this.getResources().getColor(R.color.white));lln.addView(tvTitle);ll.addView(lln);ListViewlv=newListView(this);lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);BaseAdapterba=newBaseAdapter()lv.setAdapter(ba);ll.addView(lv);dialog.setContentView(ll);}〔2〕音乐播放功能的实现音乐播放功能的实现代码实现如下:publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){switch(arg2){case0:if(ReaderActivity.this.mp==null||Constant.I==R.raw.mh){Constant.I=R.raw.gsls;ReaderActivity.this.mp=MediaPlayer.create(ReaderActivity.this,R.raw.gsls);ReaderActivity.this.mp.setLooping(true);ReaderActivity.this.mp.start();}else{ReaderActivity.this.mp.release();ReaderActivity.this.mp=null;}ReaderActivity.this.goToReaderView();break;case1:if(ReaderActivity.this.mp==null||Constant.I==R.raw.gsls){Constant.I=R.raw.mh;ReaderActivity.thi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台大学《数据结构课程设计》2021-2022学年第一学期期末试卷
- 三年级数学(上)计算题专项练习附答案集锦
- 四年级数学(四则混合运算带括号)计算题专项练习与答案汇编
- 五年级数学(小数四则混合运算)计算题专项练习及答案
- 徐州工程学院《美术(Ⅱ):美术创作》2021-2022学年第一学期期末试卷
- 学期教学课程工作计划
- 主管职能与责任的全面分析计划
- 公关活动策划与实施方案计划
- 邢台学院《美国文学史及选读》2023-2024学年第一学期期末试卷
- 多元文化视角下的幼儿教育探讨计划
- 五年级小学生安全课件
- 中国传统文化知识竞赛试题题库(附答案)
- 基于Web的航空票务管理系统的设计与实现的开题报告
- 宁德时代2024年社招测评题库
- 敬老院医护培训课件
- 三年员工幸福计划书
- 机动车检测站全套管理制度(全套)
- 文言文二则书戴嵩画牛
- 算法竞赛入门经典(训练指南)
- 无菌技术操作规范护理课件
- 2024年内蒙古恒正实业集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论