毕业论文(9)(3)

2019-04-02 19:56

在视图资源文件book_shelf.xml中,以net.myNovelReader.BookShelfGridView为标签定义书架组件,并布局到该文件下,当BookShelfActivity启动时,onCreate方法中的setContentView(R.layout.book_shelf)就能让书架页面得到初始化(部分代码如下)。

4.4 书架类BookShelfActivity

主要实现书架界面图书的添加、删除及点击进入该图书阅读界面的控制。 主要方法和实现显示图书信息的内部类:

(1)ShlefAdapter类是书架上每个子项图书显示信息的自定义内部适配器,继承了基本适配器类BaseAdapter(适配器是组件与数据之间的桥梁,负责把数据绑定到视图组件上,使得数据能够视图化)

ViewHolder类是将每个项目中的控件封装起来的类。

getView方法的作用是获得要展示的单个子项图书,第1个参数position是该子项图书在所有图书项中排列的位置;第2个参数convertView在书架第一次显示图书时为NULL值,当书架上的图书过多时,向上滚动屏幕时,屏幕上的图书视图发生变化时,convertView不是NULL值;第3个参数parent是该子项图书最终会被附加到的父级组件,也就是书架组件。

只有在convertView为NULL时才去实例化控件,创建convertView对象、holder对象,而convertView非NULL时不要实例化,否则每次都要实例化,读者反复滑动屏幕时会有“卡”的感觉,不流畅。可以在convertView为NULL时,创建ViewHolder的实例,通过convertView.setTag(holder)把它保存到 convertView中,在convertView为非NULL时再通过convertView.getTag()取出holder(部分代码如下)。

剽窃文字表述 结构化方法的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个1. 阶段处理的问题都控制在人们容易理解和处理的范围内。 基于android平台的电子阅读器_第2部分 总文字复制比:14.9%(2231) 总字数:15012 1 ·基于Android的交互式学习微阅览器设计与实现 王强;郑世珏;宋志明; - 《现代教育技术》- 2012-09-15 2 ·如何从Oracle的存储过程中访问操作系统的资源 张扬嵩; - 《电脑编程技巧与维护》- 2012-02-03 3 ·手机平台视频客户端的设计与实现 叶慧谊; - 《科技经济市场》- 2011-07-15 4 ·java 下载网页--相关文章 - 《网络(http://www.360doc.co)》- 2011-06-06 5 ·胡博钦-基于android平台的蛋白质结构检索软件设计 - 《大学生论文联合比对库》- 2012 6 ·基于Android系统的智能家居软件开发 俞宁欢 - 《大学生论文联合比对库》- 2012 7 ·JAVA中使用Socket通讯的实现 何咏明; - 《长江工程职业技术学院学报》- 2012-12-20 跨平台数据异地自动备份 8 ·

11.8% 是否引用:否 6.7% 是否引用:否 6.7% 是否引用:否 6.4% 是否引用:否 6.3% 是否引用:否 5.4% 是否引用:否 5.0% 是否引用:否 3.6%

何军; - 《电脑编程技巧与维护》- 2009-07-03 9 ·Java如何获得文件编码格式 -北京达内官网 - 《网络(http://www.bjtarena.)》- 2010-06-19 10 ·Java如何获得文件编码格式—JAVA认证考试 - 《网络(http://it.kswchina.c)》- 2010-05-28 11 ·怎样获得文件的编码格式-java版_中国程序员|程序插件|C语言|电脑维护 - 《网络(http://www.cnper.com)》- 12 ·Java如何获得文件编码格式的方法 - 《网络(http://www.jz123.cn/)》- 2011-03-27 13 ·Java如何获得文件编码格式-Java频道-中国IT实验室 - 《网络(http://java.chinaitl)》- 2011-03-08 14 ·基于Android的电子书阅读器的设计与实现 马鸣;钱鸽; - 《电脑知识与技术》- 2012-09-25 15 ·基于.NET的实验教学管理系统的设计与实现 姜卫成 - 《大学生论文联合比对库》- 2011 if (contentView == null) {

contentView = LayoutInflater.from(getApplicationContext()) .inflate(R.layout.book_shelf_item, null); holder = new ViewHolder();

holder.textView = (TextView) contentView .findViewById(R.id.txt_book); contentView.setTag(holder); } else {

holder = (ViewHolder) contentView.getTag(); }

是否引用:否 0.9% 是否引用:否 0.9% 是否引用:否 0.9% 是否引用:否 0.9% 是否引用:否 0.9% 是否引用:否 0.5% 是否引用:否 0.3% 是否引用:否 (2)getBookShelfInfo从系统书签表sys_mark中取得用户添加过的图书信息,用于将该图书显示到书架上 (3)iniBookShelf方法用来对书架上显示的图书信息进行初始化

先创建一个BookShelfAdapter的实例adapter,然后通过bookShelf.setAdapter(adapter)把图书信息数据绑定到书架组件上,对书架设置点击事件监听器bookShelf.setOnItemClickListener,这样子当用户点击图书时便能触发事件对图书进行操作(部分代码如下)。

bookShelf.setAdapter(adapter);

bookShelf.setOnItemClickListener(new OnItemClickListener())

在setOnItemClickListener的onItemClick方法,第1个参数AdapterView是指图书数据源,也就是适配器对象adapter;第2参数View是监听到的被操作控件,就是用户当前点击的图书对象;第3个参数position是被点击图书在所有图书中的位置;

Position在onItemClick方法中可以用来判断用户点击的图书是第一个还是非第一个,如果是第一个则跳转到查找文本文件的Activity,否则就获取点击的文本的路径和id以便进行后续的打开或删除文本记录操作(部分代码如下)。

if (position == 0) {

Intent intent = new Intent(BookShelfActivity.this, FindFilesActivity.class);

startActivityForResult(intent, 0); } else { ......

if (sysCursor != null

&& sysCursor.moveToPosition(position - 1)) { filePath = sysCursor.getString(sysCursor .getColumnIndex(DBHelper.SYS_FILE_PATH)); id = sysCursor.getInt(sysCursor .getColumnIndex(DBHelper.SYS_ID)); ......} }

(4)onActivityResult方法为取得用户从SD卡中选择要显示到书架上的图书信息后的返回信息

intent类能在Activity、Service间传递调用请求以及传输数据,bundle类类似于Map,用于存放key-value名值对形式的值,putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。

在onActivityResult中,通过intent的实例调用getExtras方法获取从FindFilesActivity图书查找类中返回的被选择的图书的信息,保存到bundle的实例中,然后提取文件路径和长度信息,通过DBUtil.search_sysMark(filePath, fLen) 查询系统书签表sys_mark中有无对应记录,不为NULL则表示书架上已经存在改图书,否则把该图书的记录保存到系统书签表sys_mark中(部分代码如下)。

if (DBUtil.search_sysMark(filePath, fLen) != null) {

Toast.makeText(BookShelfActivity.this, \该图书已经在书架中添加过了!!\} else { ......

DBUtil.insert_sysMark(filePath, fLen, Constant.charSetName, 0); onResume(); }

4.5 找图书的实现类FindFilesActivity

主要实现从SD卡中,将查询到的txt图书信息传递回书架界面,以将小说图书添加到书架上。 主要方法:

(1) inflateListView方法为取得当前路径目录下包含的所有文件路径信息,并把这些文件展示到文件列表中 (2) initFiles方法为加载并显示当前路径目录下的所有文件(部分代码如下)

root和parentFile都是File文件类,parentFile用来保存当前文件的路径,以便从下级目录进行返回操作。currentFiles是File类型的数组,用来保存当前目录下所有的文件,通过root的listFiles方法可获取该目录下所有的文件并保存到currentFiles中。如果/mnt/sdcard和/sdcard两种格式的SD卡根目录都不存在,提示用户“无法读取内存卡信息” 。

root = new File(\if (root.exists()) {

currentFiles = root.listFiles(); parentFile = root; inflateListView(); } else {

root = new File(\...... } else{

Toast.makeText(FindFilesActivity.this,

R.string.find_files_sdcardErr, Toast.LENGTH_LONG) .show(); return; } 4.

6 后台阅读主控制类BookPageFactory

BookPageFactory类是阅读器文字加载处理的后台主要控制类,控制着文本文件打开操作,文字字节流的读取,字节编码识别,字节到字符的转换,每页所要显示的文字截取,翻页、文字的显示和阅读背景的显示控制。

(1)BookPageFactory构造方法用来对打开阅读界面时,即将加载的各种空间属性进行初始化。

Paint画笔类在绘图过程中起到了极其重要的作用,它能保存了颜色、样式等绘制信息和指定如何绘制文本和图形。setTextAlign(Align.LEFT)方法指定阅读文字在阅读页面左对齐,setTextSize()设置阅读文字的大小,setColor()设置阅读文字的颜色。

构造方法在加载时,根据传进来的参数bg_id判断所要设置的背景图片。如果id为-1,表示没有背景,则对用来保存背景的bitmap对象

bitBookBg赋值NULL,否则把id传入到 setBgBitmap(id)中进行处理。

(2)setBgBitmap方法为阅读背景的修改控制,用户改变阅读背景时,根据传进来的背景图片id替换要绘制显示的阅读背景(部分代码如下)

Bitmap bitmap =

BitmapFactory.decodeResource(mContext.getResources(), bgID); bitBookBg =

Bitmap.createScaledBitmap(bitmap, screenWidth,screenHeight, true);

BitmapFactory.decodeResource方法的作用在论文前面有提过,这里主要用来根据id把背景图片生成位图资源以便保存在全局bitBookBg对象中;Bitmap.createScaledBitmap方法把图片缩放到屏幕的大小,所以第2和第3个参数分别是屏幕的宽和高,第1个参数的缩放对象,第4个参数是boolean值,true为过滤图片。

(3)onDraw方法负责把文字和背景的具体显示绘制到屏幕上,在setBgBitmap方法把图片信息保存到bitBookBg对象中后,由onDraw负责把bitBookBg对象绘制到屏幕上

if (

bitBookBg != null) {

c.drawBitmap(bitBookBg, 0, 0, null); } else {

c.drawColor(Color.WHITE); } ......

for (String strLine : strList) { y += Constant.fontSize + 5; c.drawText(strLine, x, y, mPaint); }

c是一个画布Canvas对象,drawBitmap和drawText方法是Canvas的两种绘制方式,前者用来绘制图片,后者用来绘制文字。两种方法的参数一样,只是对象类型不同。第1个参数是绘制的对象资源;第2个参数是起始绘制点的X坐标;第三个参数是起始绘制点的Y坐标;第4个参数是绘制工具,一般为Paint画笔对象,也可为NULL。其中x是每行首个文字离屏幕左边界的距离,y为行距,strList是个String类型的字符串数组,用来保存每行文字的信息。因为每重新绘制一行文字,都要确定绘制起始点坐标,所以循环语句循环一次,y都要自加字体大小一次。

(4)openbook方法是从书架点击图书进入阅读界面时,如该图书为首次打开时,从头开始读取用于显示到当前页的

文字信息

在openbook中,一次取大约2倍于手机屏幕每页能显示的最大字符数的字符以用于处理,依据系统检测到的该文件的编码进行字符转换,并保持在字符串对象contents中,作为参数传递给自定义的iniPageChars进行显示处理(部分代码如下)。

mappedByteBuffer = new RandomAccessFile(file, \ FileChannel.MapMode.READ_ONLY, 0, Constant.fileLen); int fontCount = Constant.fontCountsPrePage * 4; if (Constant.fileLen < fontCount) fontCount = Constant.fileLen; ......

while (mappedByteBuffer.position() < fontCount) { readByte[i++] = mappedByteBuffer.get(); }

String contents = new String(readByte, Constant.charSetName);

MappedByteBuffer 只是一种特殊的 ByteBuffer,MappedByteBuffer将文件直接映射到内存,可以映射整个文件,如果文件比较大的话可以分段进行映射,只要指定文件的那个部分就可以。map(int mode,long position,long size),可以把文件的从position开始的size大小的区域映射为内存映像文件,mode指出了可访问该内存映像文件的方式。readByte是fontCount大小的字节数组,用来保存映射到内存中的字节文件。

(5)iniPageChars方法用来处理当前页面需要显示的字符串内容

(5)openBefore方法是从书架点击图书进入阅读界面时,如该图书为之前记录打开过,则根据传入的当时保存的文件文字阅读位置开始用于显示

(6)getPreChars方法为获取上一页操作要显示的文字信息

(7)nextPage方法为下一页翻页操作控制,用户做下一页翻页操作时,控制下一页要显示的文字的读取和显示 (8)prePage方法为上一页翻页操作控制,用户做上一页翻页操作时,控制上一页要显示的文字的读取和显示 (9)readBySeekbar方法为拖动改变阅读进度的文字显示控制,用户通过菜单上的拖动条改变阅读进度时,控制阅读页的文字读取和显示

4.7 前台阅读显示界面MainActivity

MainActivity类是阅读图书时,显示在屏幕上的活动Activity,用于具体呈现给用户当前阅读界面的状态,并根据用户的不同操作,将操作结果输出反馈在显示屏幕上。

4.7.1 阅读界面上的文字显示控制 主要方法:

(1)iniPro方法用于显示界面的画布初始化,用于文字信息的加载准备

(2)openBy_SysMark方法用于准备刚从书架点击图书进入到阅读显示界面时,从系统书签表中查询此图书的阅读记录,如果有则从记录的位置开始打开显示,如果没有则从头开始显示阅读。

(3)showTheTxt方法为执行显示(2)步骤中准备好的文字信息到屏幕上 4.7.2 用户书签功能

弹出自定义的用户书签窗口Dialog,让用户能根据自己的阅读进度需要,执行:添加自己的书签、打开并定位到以前保存的指定书签阅读记录、删除不想再使用的书签。其中,在添加书签时,可以让用户对书签进行备注,用于帮助用户记忆该保存的书签当时的阅读状态。

实现的主要方法:

(1)iniLvwShowBookmark方法为初始化该书签将要显示的文本信息 (2)bookmark方法为弹出显示用户书签窗口 4.7.3 背景设置功能

让用户能从程序提供的背景图片用,选择一个作为阅读图书的背景图片,使用能根据自己的需要改善阅读时的视觉


毕业论文(9)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《管理科学研究方法》读后感

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: