




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉华夏理工学院Android应用程序设计大作业报告书课 程 名 称 Android应用程序设计 课 程 总 评 成绩 学生姓名、学 号 学 生 专 业 班级 一、选题名称及要求android文本阅读器选题要求:1)实现.txt文档格式的管理; 2)实现.txt格式文档的查看(包括翻页及标记功能)。2、 选题设计方案(可行性方案、最佳方案、界面的设计,程序流程图及功能结构框图)2.1 本系统是基于Android的文本阅读器软件,为了使用户方便快捷的操作本系统从而达到良好的用户体验,本系统需要实现以下功能:(1) TXT文档阅读用户可以根据需求选择打开存储在SD卡中的TXT文档进行阅读。(2) 系统设定在阅读TXT文档时,用户可以根据自己的喜好,通过阅读设定功能将阅读的TXT文档的字体大小、颜色、阅读背景色以及屏幕亮度进行设置,达到更舒心的阅读体验。(3) TXT文档翻页操作在本系统中阅读可以有三种方式,给用户提供更多选择。第一,用户可以通过手动手机键盘上下按键,进行阅读;第二,用户可以选择阅读界面的上下翻页按钮进行翻阅。第三,用户可选择阅读界面的滚屏按钮,进入自动滚屏阅读。(4) 书签功能在用户进行阅读时,有时无法将文档一次看完,退出系统时想要记录阅读位置,具有书签功能的阅读器就能帮助用户解决这一问题。本系统的书签功能可以让用户进行添加书签、清除书签操作,能记录上一次的阅读位置,让用户更方便的进行阅读。图 4-3是系统的用例图添加书籍阅读书籍删除书籍用户添加书签删除书签程序设计实现过程第一步 创建主界面,设置主界面的按钮,对阅读文本文档进行实现。第二步 创建阅读界面,对阅读界面进行设计与实现。第三步 创建书签、搜索相关界面,对书签、搜索功能进行实现。第四步 创建设定界面,并对其进行设计和实现。三、项目实现及测试结果(软件关键程序,包括界面及功能代码、程序运行结果)1)功能2)实现的方法及关键代码3)效果截图系统界面的实现在Android系统开发中经常使用XML布局文件对视图进行定义。所有的XML布局文件必须保存在reslayout目录中。由于ADT会根据每一个XML布局文件名在R类中生成一个变量,因此,XML布局文件名(不包含扩展名)必须符合Java的命名规则。(1)主界面:在Eclipse中创建Android项目会默认生成布局文件main.xml,在该文件中指定程序中显示的组件。其中,定义为XML的根节点。main.xml部分代码如下: (2)书签管理界面:用户单击menu键,选择书签,进入书签管理界面,在此界面用户可以添加书签;用户可以选择其添加的书签,转到书签所记录的阅读位置;用户还可以选择清除书签,将所添加的书签进行清除。对应的布局文件为listview.xml。部分代码如下: 系统入口的实现Android的每一个可视化界面,都有其唯一的布局配置文件,该文件中有各种布局的方式,和各种资源文件如图像,文字,颜色引用等,程序在运行时可以通过代码对各个配置文件进行读取,这样可以形成不同的可视化界面和绚丽的效果。该软件的主界面是一个Activity,Android工程在启动每一个Activity时都会首先执行onCreate()方法,如下:电子书内容呈现首先读取选中的电子书数据库中的相关信息,根据电子书在本地的路径读取内容,获取一个内容的MappedByteBuffer对象,代码是MappedByteBuffer m_mbBuf = new RandomAccessFile(book_file,r).getChannel().map(FileChannel.MapMode.READ_ONLY, 0, lLen),这里使用新IO流MappedByteBuffer是因为其对文件的处理效率远远的高于IO。内容的呈现是将内容文本通过自定义的onDraw()方法画在画布Canva上,在这个方法中画文本使用Canva.drawText()方法、画背景颜色是Canva.drawColor()方法、画背景图片是Canva.drawBitMap()方法。在绘制之前得到一个画笔paint,并设置paint的颜色、大小等属性。通过屏幕高度和字体大小的比值确定每页能够呈现多少行内容,然后调用onDraw()绘制。阅读界面的实现主要是自定义了一个阅读翻页控件,界面的主题是很多张张画布Canva,电子书的内容是通过Canva.drawText()画在Canva上,而通过自定义的翻页动画连接上下画布的切换,这样就形成了翻页效果。建立Android项目时,与main.xml一样也是默认生成了主Activity类,它是Android应用程序的主程序文件,其中,一个Activity是应用中的一个单一的屏幕,它继承自Activity类。同时在该文件中可完成对主界面按钮的事件处理。在MainActivity.java使用了main.xml布局文件。public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);mPageWidget = new PageWidget(this);setContentView(mPageWidget); / 若是要修改分辨率的话, 请自己手动该 480 800 两个值。mCurPageBitmap = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);mNextPageBitmap = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);/ 两画布mCurPageCanvas = new Canvas(mCurPageBitmap);mNextPageCanvas = new Canvas(mNextPageBitmap);pagefactory = new BookPageFactory(480, 800);/ 设置一张背景图片pagefactory.setBgBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.bg);/try pagefactory.openbook(bookfillPath);/ 打开文件 获取到一个缓存pagefactory.onDraw(mCurPageCanvas);/ catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();Toast.makeText(this, 电子书不存在,请将test.txt放在SD卡根目录下, Toast.LENGTH_SHORT).show();mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap);mPageWidget.setOnTouchListener(new OnTouchListener() Overridepublic boolean onTouch(View v, MotionEvent e) / TODO Auto-generated method stubboolean 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() / 右边点击的时候为false; 前一页try pagefactory.prePage(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();if (pagefactory.isfirstPage()return false;pagefactory.onDraw(mNextPageCanvas); else try pagefactory.nextPage(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();if (pagefactory.islastPage()return false;pagefactory.onDraw(mNextPageCanvas);mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap);ret = mPageWidget.doTouchEvent(e);return ret;return false;);首先,通过switch语句判断用户翻页,其核心代码如下:protected Vector pageDown() String strParagraph = ;Vector lines = new Vector();while (lines.size() mLineCount & m_mbBufEnd 0) float str_pixel = mPaint.measureText(strParagraph);System.out.println(str_pixel);int nSize = mPaint.breakText(strParagraph, true, mVisibleWidth, null);lines.add(strParagraph.substring(0, nSize);/ strParagraph = strParagraph.substring(nSize);/ if (lines.size() = mLineCount) System.out.println(lines.size();break;if (strParagraph.length() != 0) try m_mbBufEnd -= (strParagraph + strReturn).getBytes(m_strCharsetName).length; catch (UnsupportedEncodingException e) / TODO Auto-generated catch blocke.printStackTrace();return lines;/返回下一页的内容在实现管理书签功能时,需要用到Android系统的轻量数据库SQLite,将添加的书签详细信息记录在数据库中。具体代码如下:public int getM_mbBufBegin() return m_mbBufBegin;public void setM_mbBufBegin(int m_mbBufBegin) this.m_mbBufBegin = m_mbBufBegin;public Vector getM_lines() return m_lines;public void setM_lines(Vector m_lines) this.m_lines = m_lines;public int getM_mbBufEnd() return m_mbBufEnd;public void setM_mbBufEnd(int m_mbBufEnd) this.m_mbBufEnd = m_mbBufEnd;public void clearM_lines()this.m_lines.clear();public int getM_fontSize() return m_fontSize;public void setM_fontSize(int m_fontSize) this.m_fontSize = m_fontSize;mPaint.setTextSize(m_fontSize);mLineCount = (int) (mVisibleHeight / m_fontSize); / 可显示的行数 / 可显示的高度除于每个字体的高度public String getStrPercent() return strPercent;public void setStrPercent(String strPercent) this.strPercent = strPercent;4、 项目设计结果分析(分析项目实现过程中获得结果的正确性和必然性,分析编程中遇到的问题及解决方法) 在模拟器中运行文本阅读器软件,在主界面选择打开按钮后,成功进入阅读界面,阅读选择的文本文档。在进入阅读界面后,通过 MENU键选择书签,进入书签管理界面,实现了书签的添加、清除以及翻页的功能。通过对本系统进行的多次测试,系统正确实现了对文本文档的阅读功能,实现了对文档的翻页操作。实现了书签
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论