《基于android平台的电子阅读器.doc》由会员分享,可在线阅读,更多相关《基于android平台的电子阅读器.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、吉林大学珠海学院毕业论文(设计)基于android平台的电子阅读器The Mobile Phone E-book Reader Based on Android Platform完成日期 2013年4月19日吉林大学珠海学院本科毕业论文(设计)开题报告摘要Android作为一大手机主流平台,凭其优越的性能和丰富的功能,为许多用户所喜爱。拥有一部Android智能手机,让人们的生活无限便捷,android应用市场上所提供的各种丰富应用,几乎可以满足人们生活中的各种需求。现在许多人喜欢通过手机看新闻、看小说、看杂志,手机作为第一大移动客户端,更是能够满足人们随时随地获取资讯的愿望。由此可见,一款好
2、的手机阅读器开发是志在必行的。本次设计为满足用户对良好阅读体验的需求,采用Sqlite轻量级数据库技术和java编程语言,在android SDK、Eclipse及Android专门为Eclipse开发的插件ADT搭建的开发环境下,开发了这款功能丰富的电子阅读器。除了最基本的阅读功能,还有书架、找书、书签、模拟翻页效果以及阅读界面设置的操作,并且在真机上对其进行了测试与验证,基本上达到了用户的需求标准。关键字: android;阅读器;数据库;音乐播放器;翻页AbstractServes as a mainstream mobile phone system platform,Android
3、is popular with manyusers because of its superior performance and richfunctionalities. Owning an android mobile phone can make peoples life more convenient. The variety of wonderful software applications provided by android application store can almost meet peoples daily needs indifferent aspects.No
4、wadays,many people like to read news、novels or magazines on the mobile phone.Beside,mobile phone serves as the biggest mobile client is able to meet peoples aspiration of acquiring information anytime and anywhere. Therefore,a good design of mobile phone E-book reader is necessary.In order to bring
5、to users a good experience of reading,this design uses Sqlite lightweight database technology and the Java programming language. And it is finished under the development environment which consists of Android SDK、Eclipse and ADT. In addition to the basic reading functionality,the E-book reader also p
6、rovides bookshelf、bookmark、setting of reading page and some other functionalities. All the functionalities had beentested to work normally on mobile phone and basically reach the standard of peoples needs .Key words:Android;Reader;Database;Music Player;Page Turning目录1 前言11.1 课题提出的背景目的及意义11.1.1 课题提出的
7、背景11.1.2 课题提出的目的11.1.3 课题提出的意义11.2 设计思路及研究方法21.2.1 设计思路21.2.2 研究方法22 需求分析42.1 软件的基本功能42.2系统功能分析图52.3 开发环境53 总体设计63.1 总体软件结构设计63.2 系统结构图73.3 数据库设计83.3.1 数据模式E-R图83.3.2 数据表设计93.3.3 表的具体设计93.3.4 数据字典104 系统功能模块的设计与实现124.1关键技术124.1.1 android平台及java语言124.1.2 sqlite3 数据库124.2 数据库实现类及数据库工具类134.2.1 数据库实现类DBH
8、elper134.2.2 数据库操作工具类DBUtil134.3 书架绘制类BookShelfGridView154.4 书架类BookShelfActivity164.5 找图书的实现类FindFilesActivity184.6 后台阅读主控制类BookPageFactory184.7 前台阅读显示界面MainActivity204.7.1 阅读界面上的文字显示控制204.7.2 用户书签功能214.7.3 背景设置功能214.7.4 背景音乐设置功能214.7.5 字体设置功能214.7.6 设置阅读进度功能225 系统测试235.1 我的书架235.2 用户阅读界面246 总结30参考
9、文献31附录一核心代码321.书架界面代码322.小说编码自动识别核心代码333.显示界面核心代码354.小说内容读取核心代码39致谢401 前言1.1 课题提出的背景目的及意义1.1.1 课题提出的背景信息化的今天,手机已经成为生活中不可或缺的通讯设备。同时,科技的发展使得手机越发精致且智能,在这样的背景下,针对android智能手机所开发出来的各种应用软件层出不穷,将我们的生活打造的多姿多彩。现在,手机已不仅仅是简单的通讯工具,也是我们日常生活中不可缺少的获得信息的渠道,在很大程度上满足了我们快捷便利获取最新信息的需求。一个好的手机软件,能够丰富用户的生活,满足用户的需要。因此,开发一款好
10、的手机软件是相当有需求和市场的。而手机阅读软件可以为人们提供方便快捷的阅读平台,满足人们随时随地阅读各种资料的需求。1.1.2 课题提出的目的此次设计的目的在于,方便阅读者阅读的同时,带给阅读者良好的阅读体验。阅读者不用再随身携带厚重的书籍,这样能够大大减少了读者的负担,读者只需要事先下载好一本txt格式的电子书,或者在阅读器中在线下载,并存放在手机sd卡里边,就可以随时随地进行阅读。另外在阅读器的基础上,添加背景音乐功能,让读者在看书的同时,还能享受音乐的美妙,增强用户体验。1.1.3 课题提出的意义这个时代是个无纸化电子阅读1时代,相对于电视报纸杂志这些传统的信息传递媒介,互联网创造着全新
11、的生活空间,所能提供的信息量更大、更快捷,加上近几年手机等移动设备的快速发展,通过移动互联网获取资讯的方式更加符合人们随时随地获取信息的需求,电子阅读器也就应运而生,逐渐普及。虽然,android市场上电子阅读类的应用各式各样,但是大多功能较少且简单,用户体验较差,不能满足人们的需求。于是,广大手机读者追求一个功能全面的电子书阅读器。本软件是基于android系统开发的一款电子阅读器软件,给用户提供舒适的界面和良好的阅读体验是本软件的出发点。所以除了提供一个主界面以供阅读,还提供了虚拟书架和背景音乐,让用户有一种回归书房并在书房里边看书边享受音乐的感觉。另外,用户还能设置阅读界面的背景,调节字
12、体大小与选择进度,还能保存书签以供下次继续阅读。在阅读过程中,用户只要手指轻轻一划就能体验到翻书的效果,这也是阅读器的一大亮点。1.2 设计思路及研究方法1.2.1 设计思路这款阅读器的设计主要遵从需求分析、概要设计、详细设计、编码、测试与维护等一般软件工程开发过程中的几个基本流程2。需求分析阶段,首先根据需求整体分析阅读器的主要功能;概要设计阶段,根据阅读器的组织结构把这些功能模块化,根据模块之间的联系设计业务流程;详细设计阶段,对每个模块进行详细的设计,这个阶段应当保证软件的需求完全分配给整个软件;编码阶段,分别对每个模块进行调试,利用之前编码完成的该模块的桩模块或驱动模块对其进行数据调试
13、;测试阶段,最后对各个模块进行系统集成测试。在以上陈述中,所谓驱动模块3,是指被调试模块的上一级模块,也就是调用调试模块并向其传入数据的模块,驱动模块负责传数据,而具体操作由被调试的模块负责执行5;所谓桩模块3,是指被调试的模块所调用的模块,桩模块负责接收被调试模块传递的数据,并根据数据执行相应操作6。通过调查,发现智能手机的用户基本都用手机来阅读书籍资料,但各色阅读软件都存在各种不足,差强人意。本系统针对用户需求进行了仔细的分析,最后实现了软件的开发。1.2.2 研究方法阅读器在整体框架研究上采用观察研究法,在总体设计上采用结构化方法,在具体开发上采用快速原型法。观察研究法指根据既定的研究目
14、的,对现象或行为做有计划与有系统的观察,并依观察的记录对现象或行为做客观性的描述和解释。结构化方法4是在结构化程序设计思想基础上发展起来的,由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。结构化方法的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。快速原型法2就是在系统开发之初,尽快给用户构造一个新系统的模型(原型),反复演示原型并征求用户意见,开发人员根据用户意见不断修改完善原型,直到基本满足用户的要求再进而实现系统,这种软件开发方法就是快速原型法。2 需求分析2.1 软件的基本功能需求分
15、析是必不可少的步骤,也是软件设计成功的基础。在经过观察研究和需求分析,结合分析结果和业务流程,对软件的功能和设计提出了具体的要求。基本上确定阅读器的功能模块如下:1.目录页面:浏览和查找文件功能(1)浏览和查找文件:可以浏览SD卡中的文件,包括文本文件和音乐文件,并对文件进行操作,如把文本图书添加到书架上或播放音乐文件。2.书架界面:包含书架页面,添加图书,删除图书,打开图书,关于等功能(1)书架页面:阅读器的首页,首次使用阅读器需要从SD卡中往书架上添加图书,添加成功后,图书会出现在书架上。非首次使用,进入阅读器后,可直接对之前已添加在书架上的图书进行操作。(2)添加图书:通过书架页面men
16、u菜单的添加本地图书或书架上的点击添加图书打开SD卡目录,并导入SD卡中的图书。(3)删除图书:点击书架上的图书,会出现操作提示框询问是打开图书或者删除图书,点击删除图书可从书架上移除图书。(4)打开图书:点击书架上的图书,会出现操作提示框询问是打开图书或者删除图书,点击打开图书直接进入阅读界面。(5)关于:主要是关于本设计的版本,版权问题。3.阅读界面:阅读页面,添加书签,删除书签,打开书签,背景设置,背景音乐,字体设置,阅读进度,滑动翻页,返回书架等功能(1)阅读页面:用来阅读文档的主界面,是整个阅读器设计核心部分。(2)书签:可对当前阅读进度进行保存以方便下次阅读,默认以当前页第一行字作
17、为备注,这样方便用户识别自己想要阅读的进度。点击书签列表中的书签可对书签进行打开或者删除操作。(3)背景设置:提供了六种舒适的背景图作为阅读背景的选择,不同的阅读界面风格使阅读更为个性化。(4)背景音乐:做成播放器的样式,方便用户进行操作。用户可从SD卡中读取自己喜欢的歌曲作为背景音乐,在阅读的同时欣赏音乐,提升视听体验。(5)字体设置:拖动调节条可调节字体的大小。(6)阅读进度:拖动进度条可调节阅读进度。(7)滑动翻页:手指在屏幕上滑动会翻书的效果,向左滑则为向后翻页,向右滑则为向前翻页。(8)返回书架:退出阅读页面,重新进入书架页面进行操作。2.2系统功能分析图本设计总体逻辑结构层次划分如
18、图2-1所示。阅读器文件目录页面书架页面阅读页面查找文件添加图书打开图书删除图书关于背景图片阅读进度背景音乐字体设置书签滑动翻页返回书架图2-1 系统功能分析图2.3 开发环境本软件的开发是在Windows操作系统下,使用android SDK、Eclipse及Android专门为Eclipse开发的插件ADT搭建的开发环境。本软件所涉及到的数据存储的主要是用户对文本阅读文件的阅读进度及文本信息的记录,数据量比较少,使用android系统自带的Sqlite轻量级数据库就可以很好的保证这些数据的存储。因此,数据库直接使用sqlite数据库。3 总体设计3.1 总体软件结构设计打开阅读器之后,首先
19、会显示书架界面,书架上会以书本的形式,显示用户之前添加到书架上的图书。如果没有添加过图书,用户可以通过点击书架上的“添加图书”进入SD卡,添加txt格式的小说文本到书架上;通过点击书架上的图书,进入到阅读主界面。从书架上点击图书进入阅读主界面时,会根据程序自动保存的系统书签表中记录的该图书的信息,自动打开显示定位到上一次的阅读位置,如果之前没打开过,则直接从首页开始显示。在阅读界面,用户可以通过手机上的Menu键,调出功能操作菜单,菜单中用户可以根据操作需要执行:用户书签的添加、删除、打开指定书签的操作;阅读界面的背景设置;阅读时的背景音乐设置;字体大小的设置;阅读进度的拖动定位操作;返回书架
20、操作;根据各个模块的不同功能,对本设计进行了层次结构的划分。在Eclipse下创建了一个名为TXTReader的工程,工程的结构图如图3-1:图3-1 软件工程结构图主要包括以下内容:(1)src源代码目录:此目录存放Android应用程序所有的源代码。开发过程中的主要的代码编写都是在该目录下的不同功能类中编写完成。(2)gen文件夹目录:此目录用于存放ADT插件根据应用中的资源文件自动生成的R.java清单,R.java中包含了应用中的用户界面、图像、字符串等各种资源与之相对应的资源编号ID。在编写代码中,要使用资源文件时,可以十分方便的直接通过此清单中对应的资源ID来调用。(3)Res资源
21、目录:该目录用于存放整个工程用所用到的全部的资源,包括图片资源、显示界面布局文件、字符串资源、颜色资源、尺寸资源、样式资源等等。在此目录下,其中通常默认在工程创建时自动生成的常用目录有drawable、layout和values这 3个目录。这三个目录分别代表不同的资源类型。其中:drawable目录:用于保存应用的图片资源,此目录下又可细分为drawable-hdpi,drawable-ldpi,drawable-mdpi3个文件目录,用于根据要显示的屏幕分辨率的不同,对同一个要显示的图片保存不同分辨率的图片资源,这样,程序运行时,可以根据屏幕分辨率自动从对应的drawable选择最合适该分
22、辨率下显示的图片资源。layout目录:该目录用于存放使用XML格式表示的界面布局文件。一般android 推荐使用XML布局文件来控制视图,这样可以将程序的视图显示控制逻辑从JAVA代码中分离出来,在XML文件中进行界面布局,更好的体现MVC的原则。values目录:该目录也是包含了用XML格式的资源文件,这里主要保存一些额外的资源,如字符串、颜色、样式和数组等。在代码中使用时,直接通过R类来调用它们,如果不直接使用,可将代码和资源分开管理,便于维护。除了这些主要的文件目录外,工程下还包含一个AndroidManifest.xml清单文件,这个文件是整个android程序的全局描述文件。An
23、droidManifest.xml清单文件用于说明该程序的名称、程序图标、程序的版本及支持的运行环境描述、程序的各个组件的组成、可能用到的库文件及程序可能用于的权限说明等。3.2 系统结构图电子阅读器系统结构图如图3-2:阅读器书架打开图书添加图书删除图书关于阅读界面背景设置背景音乐书签滑动翻页阅读进度字体设置返回书架打开书签删除书签添加书签打开音乐文本文件音乐文件目录页面图3-2 系统结构图3.3 数据库设计3.3.1 数据模式E-R图建立系统数据模型的主要工具是实体关联图,即E-R图。E-R图7是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边
24、将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来。E-R图的图形符号约定如图3-3:图3-3 E-R图图形符号用户书签书签备注小说文本路径书签页首字符字节位置书签ID文本编码小说文本字节长度图3-4 用户书签记录的E-R图用户书签小说文本路径书签页首字符字节位置书签ID文本编码小说文本字节长度图3-5 系统书签的E-R图3.3.2 数据表设计一共设计了2张表,分别是:(1)用户书签表user_mark(用户书签的ID,小说文件的路径,文件的字节长度,书签备注,小说文本的编码,当前页首字符在文本中的字节位置)(2)系统书签表sys_
25、mark(系统书签的ID,小说文件的路径,文件的字节长度,小说文本的编码,上次阅读页字节起始位置)3.3.3 表的具体设计表名:user_mark表字段:_id,filepath,fileLength,remark,charset_name,byteBegin说明:用于存储用户自己添加的书签信息,其中:_id为自增长的主键。filepath为小说文本的路径。fileLength为小说文本的字节长度(用于结合filepath唯一确定某小说文本以防有同名同路径的文本的存在:如用户删除一文本后,可能会添加另一个同名文本,此时虽然路径和文件名都一样,但内容不一样)。Remark为用户添加书签时的备注信
26、息。charset_name为文本的字节编码(下次再打开时不用再判断其编码)。byteBegin为屏幕上的文本首字符在文本中的字节位置(添加书签时,保存当时显示在屏幕上的文本首字符在整个文本文件中所在的字节位置,下次打开可以从该位置直接读取)。表名:sys_mark表字段:_id, filepath, fileLength, charset_name,byteBegin说明:用于程序在用户退出当前阅读文本时,自动记录当前的阅读的信息,以便下次再打开此小说文本时,自动定位到最近一次关闭时的阅读位置。其中:_id为自增长的主键。filepath为小说文本的路径。fileLength为小说文本的字节
27、长度(用于结合filepath唯一确定某小说文本以防有同名同路径的文本的存在)。charset_name为文本的字节编码(下次再打开时不用再判断其编码)。byteBegin为屏幕上的文本首字符在文本中的字节位置(下次打开可以从该位置直接读取)。3.3.4 数据字典数据字典11是物理数据库的具体体现, 是关于数据的信息的集合,也就是对所有数据元素的定义的集合,是一组表和视图结构。数据库用的android系统自带的轻量级数据库sqlite3,创建了user_mark,sys_mark两个表,分别用于记录用户设置的书签信息和退出阅读界面时,程序自动记录当前阅读信息。具体内容如表3-1、表3-2:表3
28、-1 用户签表user_mark表3-2 系统书签表4 系统功能模块的设计与实现4.1关键技术4.1.1 android平台及java语言以下图表展示了Android操作系统的主要组成部分:图4-1 Android系统架构图从图示上,可以发现,android系统底层内核是以Linux系统为基础的,由底层操作系统、中间件、应用程序框架和上层应用程序层四个部分组成,层与层之间相互分离,各层分工明确、层与层之间低耦合8。大部分的android程序可以在上层应用程序层通过JAVA或者其他编码言语实现。而电子阅读器正是主要在这层使用JAVA语言为基础编码实现的。4.1.2 sqlite3 数据库andr
29、oid系统集成了轻量级的sqlite9数据库,sqlite适用于资源有限的设备,具有如下特征:轻量级数据库,功能简单且尺寸小。不依赖第三软件,与底层操作系统无关,核心引擎不需要安装,几乎能在所有的操作系统上运行,具有很高的独立性。方便管理与维护,一个文件包含了数据库的所有信息。可移植性,可以快速、无缝移值到几乎所有的操作系统语言无关性,可以支持很多的语言事务性,采用独立事务处理机制,使用数据库独占性和共享锁处理事务。Sqlite数据库支持NULL、INTEGER、REAL、TEXT、BLOB这5种数据类型,在处理varchar(n),char(n),decimal(p,s)等数据类型时,Sql
30、ite数据库会将数据转换为其支持的上述5种数据类型。4.2 数据库实现类及数据库工具类4.2.1 数据库实现类DBHelperSQLiteOpenHelper10是 Android平台提供给我们一个数据库辅助类,DBHelper继承自SQLiteOpenHelper类,负责数据库的创建、更新、打开,用户书签表(user_mark)、系统书签表(sys_mark)的创建。在DBHelper中定义了用户书签表和系统书签表中各个属性字段的字符串常量,以及创建两种表要用到数据库语句,这样方便对这些字段和语句进行保存和维护。创建数据表的语句11:Create table 表名(字段1 数据类型 prim
31、ary key autoincrement, 字段1 数据类型,)onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行(代码如下):public void onCreate(SQLiteDatabase db)db.execSQL(CREATE_TABLE_SYS_MARK);db.execSQL(CREATE_TABLE_USER_MARK);4.2.2 数据库操作工具类DBUtil负责用户书签表(user_mark)和系统书签表(sys_mark)的增、删、改、查操作控制。主要方法:(1)iniDB方法用来初始化
32、数据库对象当创建DBHelper实例时,DBHelper中的onCreate方法会创建名字分别为user_mark和sys_mark的数据表,再通过DBHelper实例调用继承自父类SQLiteOpenHelper中的方法getReadableDatabase便可获得SQLiteDatabase 对象,这时的SQLiteDatabase对象中就包含user_mark和sys_mark两张数据表。在创建数据库时要进行判断,数据库对象是否为NULL或关闭状态(部分代码如下)。if (db = null | !db.isOpen() openHelper = new DBHelper(mContex
33、t);db = openHelper.getReadableDatabase(); (2)insert_sysMark方法为向sys_mark表中添加系统书签操作在插入书签记录的过程中,需要定义一个ContentValues对象12。ContentValues对象与Map对象相似,可以通过put(key,values)方法在ContentValues对象内保存一系列的键值对,key要与各个字段属性名保持一致。当各个字段以键值对的形式保存入ContentValues对象中,ContentValues对象就是一条书签记录。通过SQLiteDatabase对象的insert方法可以把ContentV
34、alues对象插入书签表中,第1个参数是指定的数据表名;第3个参数是ContentValues对象;第2个参数指定一个列名,因为在SQL标准中不能插入全部字段为空的记录,当用户需要插入全部字段为空的记录时,就会这个指定的字段赋NULL值再去执行SQL语句(部分代码如下)。contentValues.put(DBHelper.SYS_FILE_PATH, filePath);contentValues.put(DBHelper.SYS_FILE_LENGTH, fileLen);contentValues.put(DBHelper.SYS_CHARSET_NAME, charSetName);c
35、ontentValues.put(DBHelper.SYS_BYTE_BEGIN, byteBegin);db.insert(DBHelper.TABLE_SYS_MARK, DBHelper.SYS_CHARSET_NAME,contentValues);(3)search_sysMark方法为查询sys_mark表中对应的数据操作数据库查询后返回的是一个Cursor游标对象13,游标对象可以理解为一个由符合查询条件的记录组成的一张二维表格。SQLiteDatabase对象的查询方法query中,第1个参数table是指定查询的表名;第2个参数columns是查询后返回的字段;第3个参数se
36、lection是where后面的条件语句;第4个参数selectionArgs数组用来指定where语句中查询字段的值;groupBy分组语句;having排序语句;orderBy排序语句(部分代码如下)。cursor = db.query(DBHelper.TABLE_SYS_MARK, new String DBHelper.SYS_BYTE_BEGIN, DBHelper.SYS_CHARSET_NAME ,DBHelper.SYS_FILE_PATH + = + filePath + AND + DBHelper.SYS_FILE_LENGTH + = + fileLen, null,
37、 null,null, null);(4)getSysTableDates方法用来查询sys_mark表中所有数据(5)update_sysMark方法为更新sys_mark表中阅读页首字符的字节起始位置因为sys_mark表记录都是已经添加到书架上图书,当读者点击图书进入阅读再返回书架或退出时,返回或退出时的阅读页面已经发生变化,那么首字符的字节起始位置也会发生变化,这时update_sysMark方法就会自动更新这本图书的记录,以便下次读者继续阅读同一本图书时能接着阅读。Update方法的第1个参数table是要更新数据所在的表名;第2个参数ContentValues是要更新的字段数据;第
38、3个参数whereClause是查询条件;第4个参数是与第三个参数相关联的的条件值(部分代码如下)。db.update(DBHelper.TABLE_SYS_MARK, contentValues,DBHelper.SYS_FILE_PATH + = + filePath + AND + DBHelper.SYS_FILE_LENGTH + = + fileLen, null);(6)del_sysMark方法为删除sys_mark表中对应的数据操作delete方法中的第1个参数table是指定操作的数据表;第2个参数whereClause是条件;第3个参数whereArgs是一个字符串数据,
39、与第2个参数相关联的条件值(部分代码如下)。db.delete(DBHelper.TABLE_SYS_MARK, DBHelper.SYS_ID+=+id, null);(7)search_userMark方法用来查询并返回user_mark表中所有数据在search_userMark方法中,所有的用户书签数据在查询后以按ID倒序排列的形式返回,这是因为用户书签在插入时类似于栈的先进后出,先插入的书签显示在下面,后插入的书签显示在上边。(8)insert_userMark方法为向user_mark表中添加用户书签操作(9)del_userMark方法为删除user_mark表中对应的数据操作4
40、.3 书架绘制类BookShelfGridView主要用来对书架的背景进行绘制14。在构造方法中调用BitmapFactory.decodeResource方法的主要作用是获得单行书架背景样式,第1个参数是要加载的位图资源文件的对象(一般写成 getResources()就可以);第2个是需要加载的位图资源的ID,R.drawable.bookshelf_line是单行书架背景图片的ID(部分代码如下)。bookShelfLineBG = BitmapFactory.decodeResource(getResources(),R.drawable.bookshelf_line);dispatc
41、hDraw(Canvas canvas)方法能对当前组件的各个子组件进行绘制(每个子组件都是一行书架背景),首先通过getHeight()和getWidth()得到当前页面的长和宽以及每个子组件的长和宽,然后通过循环语句逐行绘制书架(部分代码如下)。每绘制一次,都需要使用画布类Canvas调用它drawBitmap方法,第1个参数是用来绘制的位图资源类;第2个参数是绘制起始点的X坐标;第3个参数是绘制起始点的Y坐标;最后一个参数直接写NULL就可以。for (int y = top; y height; y += backgroundHeight) for (int x = 0; x widt
42、h; x += backgroundWidth) canvas.drawBitmap(bookShelfLineBG, x, y, null);在视图资源文件book_shelf.xml中,以net.myNovelReader.BookShelfGridView为标签定义书架组件,并布局到该文件下,当BookShelfActivity启动时,onCreate方法中的setContentView(R.layout.book_shelf)就能让书架页面得到初始化(部分代码如下)。4.4 书架类BookShelfActivity主要实现书架界面图书的添加、删除及点击进入该图书阅读界面的控制。主要方法
43、和实现显示图书信息的内部类:(1)ShlefAdapter类是书架上每个子项图书显示信息的自定义内部适配器,继承了基本适配器类BaseAdapter(适配器是组件与数据之间的桥梁,负责把数据绑定到视图组件上,使得数据能够视图化)ViewHolder类是将每个项目中的控件封装起来的类。getView方法的作用是获得要展示的单个子项图书,第1个参数position是该子项图书在所有图书项中排列的位置;第2个参数convertView在书架第一次显示图书时为NULL值,当书架上的图书过多时,向上滚动屏幕时,屏幕上的图书视图发生变化时,convertView不是NULL值;第3个参数parent是该子
44、项图书最终会被附加到的父级组件,也就是书架组件。只有在convertView为NULL时才去实例化控件,创建convertView对象、holder对象,而convertView非NULL时不要实例化,否则每次都要实例化,读者反复滑动屏幕时会有“卡”的感觉,不流畅。可以在convertView为NULL时,创建ViewHolder的实例,通过convertView.setTag(holder)把它保存到 convertView中,在convertView为非NULL时再通过convertView.getTag()取出holder(部分代码如下)。剽窃文字表述1.结构化方法的基本思想:把一个复杂
45、问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。04090713_郑华超_基于android平台的电子阅读器_第2部分总文字复制比:14.9%(2231)总字数:150121基于Android的交互式学习微阅览器设计与实现王强;郑世珏;宋志明; - 现代教育技术- 2012-09-1511.8%是否引用:否2如何从Oracle的存储过程中访问操作系统的资源张扬嵩; - 电脑编程技巧与维护- 2012-02-036.7%是否引用:否3手机平台视频客户端的设计与实现叶慧谊; - 科技经济市场- 2011-07-156.7%是否引用:否4java 下载网页-相关文章 - 网络(http:/www.360doc.co)- 2011-06-066.4%是否引用:否5胡博钦-基于android平台的蛋白质结构检索软件设计 - 大学生论文联合比对库- 20126.3%是否引用:否6基于Android系统的智能家居软件开发俞宁欢 - 大学生论文联合比对库- 20125.4%是否引用:否7JAVA中使用Socket通讯的实现何咏明; - 长江工程职业技术学院学报- 2012-12