效果。
实现的主要方法:
从onActivityResult方法中,取得用户在选择背景图片用到的Activity中返回的背景图片信息,根据返回结果显示阅读背景图片。
4.7.4 背景音乐设置功能
该功能让用户在阅读小说时,可以选择歌曲作为阅读时的背景音乐,增加阅读的乐趣。 实现的主要方法:
从onActivityResult方法中,取得用户在选择背景音乐用到的Activity返回的背景音乐信息,根据返回结果通过showMusicPlayer显示并播放用户选择的音乐。
4.7.5 字体设置功能
该功能可以让用户根据需要,改变显示的文本的字体大小。 实现的主要方法:
通过changeFontSizeBySeekbar方法,显示改变字体的弹出窗口,在其中的SeekBar拖动条上,设置了监听字体状态改变的监听器,该监听器根据拖动条值改变字体的大小
4.7.6 设置阅读进度功能
该功能可以让用户直接拖动进度,跳转到打算阅读的进度位置,让用户能快速定位到想要到达的阅读进度。 实现的主要方法:
通过changePageBySeekbar方法,显示改变当前阅读进度的弹出窗口,在SeekBar拖动条位置改变状态的监听器中,根据拖动条值改变阅读进度
。
5 系统测试 5.1 我的书架
打开本系统,首先进入的是我的书架界面,效果如图5-1所示。 图5-1书架界面
目录页面,往书架上添加图书,效果如图5-2和图5-3所示。 图5-2 目录界面图图5-3 书架上已添加的图书
对书架上的图书进行操作,包括打开图书和删除图书,效果如图5-4和5-5所示。 图5-4 操作提示框图5-5 删除操作提示框
在图5-4中,如果点击打开则直接进入阅读界面。如果点击删除则会出现删除操作提示框(如图5-5所示),询问用户是否确定要把删除操作进行到底,这样可以避免在用户不小心点中删除键后直接删除图书。
5.2 用户阅读界面
点击打开键后,则直接进入阅读界面,效果如图5-6所示。 图5-6 阅读界面
如果用户第一次运行软件或者是打开一本新书,进入阅读界面后是该图书的第一页。否则进入上一次退出时所在的阅读页面。
阅读时手指向左向右的翻页效果,效果如图5-7和图5-8所示。 图5-7 向左翻书图5-8 向右翻书
在阅读界面时,点击手机上的Menu按钮,效果如图5-9所示。 图5.9 阅读界面的菜单 图5-9 Menu菜单
点击书签,出现书签界面,如图5-10所示 图5-10 书签界面
书签操作包括打开书签、添加书签和删除书签,效果如图5-11、5-12、5-13所示。 图5-11 书签操作提示框图5-12 删除书签操作提示框
图5-13 添加书签页面
在书签界面,点击加号图标则出现图5-13所示的添加书签页面。如果点击已存在的书签则出现如图5-11所示的书签操作提示框询问是打开书签或者删除书签,点击打开书签则直接打开该书签对应的阅读页面。如果点击删除按钮则出现如图5-12所示的删除操作提示框询问是否把删除操作进行到底,这样设计可以防止用户误进行删除操作,点击确认才能最终删除书签。
背景设置界面,效果如图5-14和图5-15所示。 图5-14 背景设置界面图5-15 背景效果
在主菜单界面中单击“背景音乐”按钮进入背景音乐界面,效果如图5-16所示。 图5-16 背景音乐界面
字体设置界面,拖动调节条可调节大小,效果如图5-17所示。 图5-17 字体设置界面
调节阅读进度,拖动进度条选择自己想要的进度,效果如图5-18所示。 图5-18 进度设置界面 6 总结
电子阅读器所实现的模块在经过测试可正常运行,且达到了预期设计效果。但是设计中仍存在不足之处。 特点:以Android作为开发平台、JAVA作为开发语言、SQLite3作为数据库技术支持,能较好解决开发过程中遇到的技术问题。本设计的界面特点:采用大量界面友好的人机交互式,使用户在阅读界面可以完成自己需要的操作,简单方便,很好的体验阅读的全过程。电子阅读器实现了从SDCARD找书,添加图书,删除图书,滑动翻页,更改字体大小,设置背景图片,设置背景音乐,添加书签,选择书签,删除书签,选择进度等功能,在很大程度上方便用户阅读书籍资料。其中,书架界面,翻页效果,背景音乐,背景图片,读者最后一次阅读的信息并在下次打开时自动初始化到上次阅读到的界面是本设计的几大特点。
不足:在本设计中只有将新书下载至SDCARD中才可供读者阅读,因为本人设计水平有限,未能实现上网下载图书的功能,没有能够利用到网络上资源。
参考文献
[1] http://www.artsbj.com/Html/zhuanti/zxfx_2499_4389.html北京文艺网. 移动阅读时代:电子阅读器的发展背景及发展趋势[EB/OL]. [2012-12-23].
[2] 殷人昆. 实用软件工程(第三版)[M]. 清华大学出版社, 2010-11-1. [3] 朱少民. 软件测试方法和技术(第2版)[M]. 清华大学出版社.
[4] 百度百科. 结构化方法[EB/OL]. http://baike.http://www.wodefanwen.com//view/551681.htm [5] 百度百科. 驱动模块[EB/OL]. http://baike.http://www.wodefanwen.com//view/495038.htm [6] 百度百科. 桩模块[EB/OL].http://baike.http://www.wodefanwen.com//view/229023.htm
[7] 百度百科. E-R图[EB/OL]. http://baike.http://www.wodefanwen.com//view/15236.htm?fromId=1622963 [8] 邓凡平.深入理解Android(卷1).?机械工业出版社.
[9] 百度百科. SQLite[EB/OL]. http://baike.http://www.wodefanwen.com//view/1447600.htm [10] 吴亚峰.Android应用案例开发大全[M].北京:人民邮电出版社. [11] 萨师煊、王珊.数据库系统概论(第三版)[M].高等教育出版社, 2006 [12] 李刚.疯狂Android讲义.电子工业出版社.
[13] 关东升.Android开发案例驱动教程.机械工业出版社.
[14] CSDN IT社区网. 书架效果[EB/OL]. http://blog.csdn.net/wangkuifeng0118/article/details/7944215 0
附录一核心代码 1.书架界面代码
private Bitmap bookShelfLineBG;//一行书架的背景
public BookShelfGridView(Context context, AttributeSet attrs) {
super(context, attrs); //取得单行书架的背景样式
bookShelfLineBG = BitmapFactory.decodeResource(getResources(), R.drawable.bookshelf_line); } /**
* 绘制书架各子项(一行为一个子项) */ @Override
protected void dispatchDraw(Canvas canvas) { int count = getChildCount();
int top = count > 0 ? getChildAt(0).getTop() : 0; int backgroundWidth = bookShelfLineBG.getWidth(); int backgroundHeight = bookShelfLineBG.getHeight()+2; int width = getWidth(); int height = getHeight();
for (int y = top; y < height; y += backgroundHeight) { for (int x = 0; x < width; x += backgroundWidth) { canvas.drawBitmap(bookShelfLineBG, x, y, null); } }
super.dispatchDraw(canvas); }
2.小说编码自动识别核心代码
* 根据输入文本文件判断文本所使用的编码,如果传入的默认编码为空,则表示之前尚未检测过编码 *
* @param filePath * 文件路径
* @param defaultEncode 为空表示之前未检测过检测,执行编码检测操作。 */
public static void getCharSet(String filePath, String defaultEncode) { if (defaultEncode.equals(\未检测编码时,执行检测编码操作 {
BufferedInputStream bis = null;//用于检测编码的字节流 charSetName = \设置默认编码为GBK //编码检测代理
CodepageDetectorProxy detector = CodepageDetectorProxy .getInstance();
detector.add(new ParsingDetector(false)); detector.add(UnicodeDetector.getInstance()); detector.add(JChardetFacade.getInstance()); try {
//取得待检测的文件字节流
bis = new BufferedInputStream(new FileInputStream(new File(
filePath)));
//根据字节流自动检测出文本的Charset
Charset charset = detector.detectCodepage(bis, 10240); if (charset != null) {//不为空时表示检测到对应的编码类型 charSetName = charset.name();//取文本的编码名 }
} catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace(); } finally { //关闭字节流 try {
if (bis != null) bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }
// 首次打开时,初始化起始和下一页开始字节位置,以便正确计算处理打开的第一个页面处理显示的字符后,正确的计算当页起始字节和下一页起始字节
fontsPreEnd = 0; fontsNextBegin = 0; } else// 已过检测编码 {
charSetName = defaultEncode; }
Constant.seekbarBytesPer = (float) Constant.fileLen / Constant.seekbarMax;// 计算拖动条每刻度代表的字节数 ini_r_n(charSetName); }
3.显示界面核心代码 /**
* 加载显示文本页面控件初始化 */
private void iniPro() { // +
mPageWidget = (PageWidget) findViewById(R.id.pageView); // 显示页面
pagefactory = new BookPageFactory(this, screenWidth, screenHeight, bgID); // 翻页效果控制
mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap); mPageWidget.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent e) { // TODO Auto-generated method stub // +
boolean ret = false; if (v == mPageWidget) {
if (e.getAction() == MotionEvent.ACTION_DOWN) { mPageWidget.abortAnimation();// 翻页效果动画
mPageWidget.calcCornerXY(e.getX(), e.getY());// 计算翻页效果的折边 pagefactory.onDraw(mCurPageCanvas);
if (mPageWidget.DragToRight()) {// 从屏幕左半区域向右拖动(前一页操作) try {
turnPage = pagefactory.prePage(true); } catch (IOException e1) {
// TODO Auto-generated catch block e1.printStackTrace(); }
// if(pagefactory.isfirstPage())return false; pagefactory.onDraw(mNextPageCanvas);
} else {// 从屏幕右半区域向左拖动(下一页操作) try {
turnPage = pagefactory.nextPage(true); } catch (IOException e1) {
// TODO Auto-generated catch block e1.printStackTrace(); }
// if(pagefactory.islastPage())return false; pagefactory.onDraw(mNextPageCanvas); }
mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap); }
if (turnPage)//判断可以正常翻页,则绘制翻页效果 ret = mPageWidget.doTouchEvent(e); return ret; }
return false; // - } }); // - } /**
* 进入显示页面时,根据传入的信息显示文本内容到界面上
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业论文(9)(4)在线全文阅读。
相关推荐: