基于Android系统的电子书阅读器的设计与实现_第1页
基于Android系统的电子书阅读器的设计与实现_第2页
基于Android系统的电子书阅读器的设计与实现_第3页
基于Android系统的电子书阅读器的设计与实现_第4页
基于Android系统的电子书阅读器的设计与实现_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.3.2 建表语句1)创建:1、创建书的表:createtableIFNOTEXISTSbook(bidintegerprimarykeyautoincrement,bpathvarchar(255)notnull);2、创建书签的表:createtableIFNOTEXISTSbookmark(bmidintegerprimarykeyautoincrement,bpathvarchar(50)notnull,bmnamevarchar(50)notnull,bmoffsetintegernotnull,bmsavetimevarchar(20)notnull);3、创建用户管理的表:createtableIFNOTEXISTSuser(useridintegerprimarykeyautoincrement,usernamevarchar(20)notnull,passwordvarchar(20)notnull,telephonevarchar(20)notnull);4、创建最近阅读的表createtableIFNOTEXISTSnearlyread(bookidintegerprimarykeyautoincrement,booknamevarchar(50)notnull,bookreadtimevarchar(20)notnull);5、创建下载管理的表createtableIFNOTEXISTSdown(downidintegerprimarykeyautoincrement,downuservarchar(20)notnull,downbookvarchar(20)notnull,downtimevarchar(20)notnull);2)SQlite3数据库使用方法:选择:selectfrombookmarkwherebmid=1;插入:insert(bookmark,null,values);删除:deletefrombookmarkwherebmid=3;查找:query(table,columns,selection,selectionArgs,groupBy,having,orderBy)4.3.3 数据表分析本数据库用的是一个轻量级嵌入型数据库 sqlite3,即创建了一个数据库reader.db,在数据库中创建了几张数据表。在建设网站系统或者软件之前,我们必须对系统所用到的数据进行大致的分

类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏,可以说数Book表(用来存放书籍,如表4-1):字段名称数据类型条件约束bidintegerprimarykeybpathvarchar(255)notnull表4-1书籍数据表Bookmark表(管理书签,如表4-2):字段名称数据类型条件约束BmidIntegerprimarykeyBpathvarchar(50)notnullBmnamevarchar(50)notnullbmoffsetIntegernotnullmsavetimevarchar(20)notnull表4-2书签数据表User表(用户数据,如表4-3):字段名称数据类型条件约束UseridIntegerprimarykeyusernamevarchar(50)notnullpasswordvarchar(50)notnulltelephonevarchar(20)notnull表4-3用户数据表Nearlyread表(最近阅读,如表4-4):字段名称数据类型条件约束BookidIntegerprimarykeybooknamevarchar(50)notnullbookreadtimevarchar(20)notnull表4-4最近阅读数据表Downg(下载,如表4-5)::字段名称数据类型条件约束

DownidInteger primarykeyDownidDownuser varchar(50) notnulldowntime varchar(20) notnull4-5下载数据表获取sd卡上的txt文本由于一个Android模拟器或者是一个手机客户终端上只会配置一个 sdcard,所以一步移动设备上有各种各样的应用 App,而且各种App都可能会由数据或者文件存储到移动设备的sdcard上,故而有各式各样的文件类型是该款软件不需要的。也是用户选择本款软件时所不需要的信息文件,于是通过构造一个过滤式的方法让软件只接受来自sdcard上的TXT格式的文本文件。该方法是先通过判断是否存储路径是sdcard,通过getRecordFiles()方法过滤掉其他无用文件,将剩余的TXT文件放置集合AirrayList中,然后通过Android的空间Listview将其目录结构文件给显示出来。代码如下:privatevoidgetRecordFiles(){recordFiles=newArrayList<String>();if(isSdcard){Filefiles[]=txtDir.listFiles();if(files!=null){for(inti=0;i<files.length;i++){if(files[i].getName().indexOf(".")>=0){/*只取.txt文件*/Stringfile=files[i].getName().substring(files[i].getName().indexOf( "."));if(file.toLowerCase().equals(".txt"))

recordFiles.add(files[i].getName());))))图5-1 文的过滤毓程一长按选项删除 1可能在漫长的使用软件生活中,用诲在可能在漫长的使用软件生活中,用诲在sdcard里面积累十分多的TXT文件数量,所以这里提供一个删除功育瞅弛耐除一些很久不用的文件该功能通件数量,所以这里提供一个删除功育瞅弛耐除一些很久不用的文件该功能通过获取到Android控件ListView上每一泰Jtem的长按事件进行绑定事件监听,文通过该行为进行功能描述,通过获取费统TX十过获取到Android控件ListView上每一泰Jtem的长按事件进行绑定事件监听,文通过该行为进行功能描述,通过获取费统TX十card里面1二件的操作权限来对于sdcard里面的TXT文件进行删除是删碌的方法delFile码实现:()的部分代publicvoiddelFile(StringfilePathAndNameTTtry(过滤StringfilePath="/sdcard/"+filePathAndName;publicvoiddelFile(StringfilePathAndNameTTtry(过滤StringfilePath="/sdcard/"+filePathAndName;filePath=filePath.toString();存放至存放至java.io.FilemyDelFile= newjava.io.File(filePath);myDelFile.delete();)catch(Exceptione){Toast.makeText(this,"删除文件操作出错",1000).show();e.printStackTrace();))5.4.3阅读文本界面的实现这是该款软件最基本也是最重要的功能一一对于 TXT文本文件的可视化读取。由于软件中对于sdcard里面的文件的读取可以是从各种各样的界面上获取要读取的TXT文件资源,比如可以从本地管理列表直接读取,也可以从最近阅读列表读取,或者是从阅读界面来读取该文本的书签从而读取文本文件的某一段。所以,通过Android的Intent(意图方式)传递数据,数据包括了实现本界面的Activity类名,也包括了要阅读文本的书名,还有就是要读取文件的开始页码比例。如果是非进度跳转功能,或者是书签的功能则默认进度读取开始页码也第一页。而这些数据则通过封装到某个对象中,用bundle传递给Intent,再通过Intent转发数据。以下便是通过BitmapFactory工厂封装了一些绘制阅读背景的方法的部分代码实现:mPageWidgetsetBitmaps(mCurPageBitmapmNextPageBitma。;mPageWidgetsetOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEvente){booleanret=false;if(v==mPageWidget{if(e.getAction()==MotionEvent.ACTION_DOWNmPageWidge.tabortAnimation();mPageWidge.tcalcCornerXY(e.getX(),e.getY());pagefactory.onDraw(mCurPageCanvasif(mPageWidge.tDragToRight()){try{pagefactory.prePage();}catch(lOExceptione1){e1.printStackTrace();}if(pagefactory.isfirstPage())returnfalse;pagefactory.onDraw(mNextPageCanvas}else{try{pagefactory.nextPage();}catch(IOExceptione1){e1.printStackTrace();}if(pagefactory.islastPage())returnfalse;pagefactory.onDraw(mNextPageCanvas}mPageWidge.tsetBitmaps(mCurPageBitmap,mNextPageBitmap);}ret=mPageWidge.tdoTouchEvent(e);returnret;}returnfalse;}});图5-2随枇虢打开文件流程图5.4.4menu按钮功能的实疝一]添加书签功能一一作为一款电欣网读器软件,这个功能是个轻松快捷而且不可避免的功能,它能够将小白硬本文人断点记录。如果用户在长时间的阅读过程中感觉到疲乏,但是文件依约y寸间内看完,为了方便下次阅读则将当前页面记录,下次则可吵接:[氤阅读[否该功能通过记录了文件的总字节长度及当前的总豕度fp纱总当/页/的字,则是通过之前已经计算好了的字体大小,每页谷哧而放多少字节数。是privatevoidsaveBookMarkDialog(){finalDialogd= newDial/Og(tUrnteSt. this);/随机I/O流/_ ……/打开/ /打开/d.setTitle("添加书签");1——/ L r zd.setContentView(R.layout.bookmark_dialog);finalfinalbmet);bmsure);EditTextet=(EditText^/findViewByldRid.Buttonsure=(Bfinalfinalbmet);bmsure);finalButtoncancel=(Button)d.findViewById(R.id. bmcancel);//确定动作sure.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){Stringbmn=et.getText().toString();if(bmn.length()<1){d.dismiss();d.show();}else{if(bmn.length()>10){bmn.substring(0,10);}BookMarkbm=newBookMark();bm.setBookPath(txtname);bm.setMarkName(bmn);bm.setCurrentOffset(pagefactory.m_mbBufEnj)dbm.setSaveTime(DateUtil.dateToString(newDate()));mHelper=newCRDBHelper(getApplicationContext());operateResult=mHelper.addBookMark(bm);mHelper.close();if(operateResult){Toast.makeText(turntest.this,”添加成功",1000).show();}else{Toast.makeText(turntest.this,"添加失败",1000).show();}d.dismiss();}}});以下是查找书签及实现跳转的部分代码实现:list=newArrayList<String>();for(inti=0;i<mBookMarkList.size();i++){Stringmark=mBookMarkList.get(i).getMarkName()+""+mBookMarkList.get(i).getSaveTime();list.add(mark);}list_tag=(ListView)findViewById(R.id.list_tag);adapter=newArrayAdapter(ShowBookmark.this,list_tag.setAdapter(adapter);//短按跳到书签list_tag.setOnItemClickListener(newOnItemClickListener(){@OverrideintpublicvoidonItemClick(AdapterView<?>arg0,Viewarg1,arg2,intlongarg3){//获取到所点击的书签的定位intOffset=mBookMarkList.get(arg2).getCurrentOffset();IntentmIntent=newIntent(ShowBookmark.this,turntest.class);BundlemB=newBundle();mB.putString("Activity","ShowBookmarkActivity");mB.putInt("Offset",Offset);mIntent.putExtras(mB);startActivity(mIntent);finish();}});删除书签:该功能就是简单的运用对于书签的 SQLite数据库操作,通过对于ListView组件的长按事件添加监听,程序自动生成对话框。以下是部分代码实现:list_tag.setOnItemLongClickListener(newOnItemLongClickListener()(@OverridepublicbooleanonItemLongClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){finalintpos=arg2;newAlertDialog.Builder(ShowBookmark.this).setTitle("提.setMessage("删除该书签").setPositiveButton( "确定",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){booleanb=mHelper.deleteBookMark(mBookMarkList.get(pos).getBookMarkId());if(b&&mBookMarkList.size()>0){list.remove(pos);adapter.notifyDataSetChanged();))}).setNegativeButton("取消",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich)dialog.dismiss();)}).show();returnfalse;}});//退出功能界面打开软件,会从Logo界面自动跳转到该功能界面,该功能的实现只是简单的通过Android系统的界面设计,通过对其TabHost选项卡组件的运用将界面纵向平行的设计为三个覆盖的界面,点击则切换成指定的选项界面,如图5-1:图5-1功能界面书籍选择主界面打开软件,软件就自动加载sd卡上的txt文档,该列表通过获取Android系统的Sdcard的路径然后获取到里面的所有文件,然后通过文件名后缀来判别是否为.TXT结尾的文件将其添加进入数据库,然后通过数据库查询列出所有该书籍表里面的集合从而列出要选择的文档,如图5-2:Mubel.rea<ttt前择您施读文件:Mubel.rea<ttt前择您施读文件:xyy2,txtxyy1.txt图5-2书籍选择界面用户阅读界面用户左键单击要阅读的电子书籍,进入由 Android的画笔类,通过调用BitmapFactory工厂方法onDraw绘制动态页面效果,画面产生获取页面坐标事件,根据坐标来判断是向前翻页还是向后翻页,如图5-3是向后翻页:正巴rl一班月的外皆信于崇馋,胞融帝第翠,-"正巴rl一班月的外皆信于崇馋,胞融帝第翠,-"W.翡之就发情口♦七E0如能杲零理琳注此的“亲、打也工$的匡埼・a爸强的推,‘去用,,由斗厘物ss»h=.±u山德厢现横唔■的东日悍聒点悟n题也点色岛母彳僵我■她打会sgrr我Fnltu密扑一噌揪命瑞士:E施技工注助的厅■白忸.$的罂蜉然票曾塔沮地履内.»翳里隽上帮贫拍M喜泰3-魏舒口山川之士昼山M西瑞.廷主hffl备毋长上地期地币是辿地•直得•向hI上一以土.涔EW焉fQ六里上K碧"葭#t阻律duOLTg一工雷人曷市S^5^252SH秀的至福驾国基基山毁鬟理毕尔1.里.上,**偏西十曲色受佚果带酱/•:!•■丁威%盛&IIL,技两区害咨案片.二.杰卜可取阕第从模一春-外膜-攫.除维财鬻•里佗窗图5-3用户阅读界面菜单点击menu按钮,就回出现选择界面,增加书签、查看书签、退出阅读。如图5-4:r口的?।厘为不徊相悟.翱坨样军押手1■做小相信.小情.你HZ保后你的铁旧,运?时了一半,7翱你还或柠建届.我时不琲书画你.但登於可■以福勖师.M文褥美了,m圣里文浮现学幻的神色.『设备关笫.即使我就卷伤育你.我也不a这也做“改为,你必源相信我,我考押很久了..加川吃了一惊.「你却晅林敬各享?港告诉你的\」他谊,站“末.走过宋空吁姑皇酢的原沿匚早乳时的手屣短疣穰面r不用.我虹道际的名字,指是毋拉,倾咛自许宓也界,内久混久以期1.山川还是第一个祥/,太阳中总年出打北时,岫.'门就来当i反过我,说你会来.我恨他1门,住唱七帝.IB那吃我却听高兴叫副他们施你会来.他们只西诉里你的名字,说你会采副载的世界+他:们遂告诉我另一加・.一个跖的开的.至少是一个等化:任何费化都是好的,

轮日(5在这世界邨独一人逐了不知零少岁退出兽档进廉退出图5-4Menu菜单功能6,5书签操作点击添加书签,会出现一个添加书签的界面,如图5-5图5-5 添加书签点击查看标签就会出现相应文档的标签列表,如图5-6MohclreadExt34562012-4*2215:2:1813142012-4-2215:1:4723452012-4-227:5:5323420124227:5:39图5-6 书签列表

长按某个选项就会删除标签。如图5-63■・l_read_tMtS4562012-4-2215:2:18图5-7 删除书签如果取消则返回标签界面,如果确定则删除书签。书籍操作删除文档界面,从5-1图中删除xyy2.txt长按菜单键,该功能是对于Android组件ListView的长按事件的添加监听功能,如图 5-8:图5-8删除书籍

最近阅读在阅读过得书籍会添加进最近阅读数据库,方便用户后期直接点击进入阅读,如图5-9:图5-9最近阅读列表用户登录通过与服务器的连接获取服务器提供了最新最热的书籍推荐, 先登陆可以记录该用户的下载记录。如图:图5-10在线登陆界面在线中心FORedder•\in最新热门■ 最近下薪热门推荐:昌a仁而ETsfl 2012*5*10锭L…onlybeautifullove•Ifor.tirt ZDT2->ia5Martialartstl充5k二& m.*7.' 2却LI5砂W. ,Jinyong'sclassicn»J日st 20TZh>icM可骐epi<n;1ggi 疝“二H叩啰attyJV4rii-1.■- 20f25-G1ViAcademicres*心、工京一 工第Ez?Hhlcrydeduce-.ai.', ?0fJ.HCl图5-11服务器获取的最新资源6.10性能分析概述及方案特点本软件是利用java语言在android平台上实现的一款阅读软件,使用起来方便,非常容易使用,也方便用户的操作,最重要的特点就是实现简单,没有过于复杂冗余的操作。数据库是使用sqlite3来进行存数。方案特点:(1)系统先进性本系统的先进性主要体现在能触屏翻页,能显示已经阅读的进度,大大减少了占用用户的时间,而且阅读起来比较方便快捷。(2)系统可扩展性由于本系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论