1、菱形框,表示联系类型。椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。直线,联系类型与其涉及的试题类型之间以直线连接。图2 ER图数据库使用了2个实体,分别为书籍、书签。书籍与书签的对应关系为1:n。在数据库的设计方面,为了实现数据库的完整性与一致性,我们使用了触发器,在数据库的选用上,选择了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎的SQLite数据库,数据库名称为eBook.db,共2个实体表,分别为书籍表、书签表。与书籍(books)实体类的属性信息对应的字段信息表如表1所示:字段名类型说明book_idINTEGER书籍编号book_n
2、ameTEXT书籍名称book_path书籍路径file_size书籍大小last_readDATETIME阅读时间book_shelf所属书籍read_percentageDOUBLE已读比例pos阅读位置表1 书籍表书籍表(books)创建的SQL语句:CREATE TABLE books ( book_id INTEGER PRIMARY KEY, book_name TEXT NOT NULL, book_path TEXT NOT NULL UNIQUE, file_size TEXT, last_read DATETIME DEFAULT(datetime(CURRENT_TIME
3、STAMP,localtime), book_shelf INTEGER, read_percentage DOUBLE DEFAULT 0, pos INTEGER DEFAULT 0 ); 与书签(bookMarks)实体类的属性信息对应的字段信息表如表2所示:id书签编号percent位置比例content书签容书签位置time添加时间表2 书签表书签表(bookMarks)创建的SQL语句:CREATE TABLE bookMarks ( id INTEGER PRIMARY KEY AUTOINCREMENT, book_id INTEGER, percent DOUBLE, con
4、tent TEXT, pos INTEGER, time DATETIME DEFAULT ( datetime( CURRENT_TIMESTAMP, )触发器(fk_Delete)创建SQL语句:CREATE TRIGGER fk_Delete BEFORE DELETE ON books FOR EACH ROW BEGIN DELETE FROM bookMarks WHERE book_id = old.book_id; END2.3功能框架设计图3 功能模块图手机电子书阅读器软件主要分为8个功能大模块如图3所示,分别是欢迎模块、软件主界面、书籍管理、阅读管理、文件浏览、系统管理、使
5、用帮助、关于。其中书籍模块中还要文件扫描模块,阅读管理中有章节管理、书签管理、搜索管理。系统设置中有密码设置。其各个模块的详细设计如下:1.软件欢迎模块。该模块主要实现的功能是,通过Handler来实现一个2秒的缓冲界面,然后通过SharedPreferences读取配置文件,判断是否有密码。如果有密码则跳转至密码验证界面;如果没有密码则判断是否为第一次使用此软件,如果是第一次使用则跳转至引导页面。2.软件主界面模块。该模块是一个通过TabHost标签组件来实现的一个分类管理功能。本界面的标签在屏幕的最下方,分别是:文件管理、我的书架、我的设置。点击不同的标签则显示不同的界面,默认显示标签为“
6、我的书架”,打开选项中会出现对应的视图。实现了将本程序关联成手机默认打开程序中,即从外部打开文本文件时选择查看方式中会出现本软件图标供用户选择以本软件打开。3.书籍管理。该模块是以书架的模式来展现书籍,并可以对书籍进行一些操作,本模块共有3个书架分别为:“最近阅读”、“历史阅读”、“收藏阅读”,默认显示是“最近阅读”书架。本模块有导航按钮和书籍选择按钮。当弹出导航栏时,则把书籍从每行显示三本书籍调整到每行显示两本书籍。导航栏中与三大项:分类排序、添加书籍、清空书籍。每项里面又有子菜单。当点击导航里的按钮时会显示子功能导航,当再点击其它按钮时,会收起前面的子功能导航,展开当前的子功能。当单击书籍
7、选择按钮时会弹出书籍选择窗口,选择里面的书架则进入相应的书架界面,同时还可以通过左右滑动来切换书架界面。当单击书籍时会打开相应的书籍阅读界面,长按某书籍时会弹出书籍操作窗口。4.文件浏览。该模块使用ListView组件显示文件目录,不同的文件类型显示不同的图标。最上面标题栏有导航按钮,当点击导航按钮时会从左侧弹出导航栏,导航栏中有标记文件按钮、分类排序按钮和添加到书架按钮,点击标记文件按钮或长按某文件或目录时则切换到多选模式,其中有多选按钮、反选按钮和取消按钮;点击分类排序则弹出子菜单,其中有按名称排序、按大小排序、按时间排序和按类型排序;点击添加到书架时如果为选择文件则自动进入多选模式让用户
8、进行文件选择,如果用户未选择则提示“请选择书籍”,进行选择是用户可选择文件或目录,系统会自动进行扫描,把符合要求的文件添加到“最近书架”中,并弹出提示信息,其中有失败个数、已存在个数和成功个数。在多选模式下点击返回按钮或点击标记文件会取消多选模式。非多选模式下,用户点击文件时本软件会根据文件扩展名来判断打开文件方式,如果是文本文件则直接用本软件打开,并把其添加到“最近书架”中,其它格式则调用对应的软件打开,如果是未识别的类型则提示“没有打开此文件的应用”。5.阅读管理。该模块通过自定义一个View视图来显示书页,通过自定义类来读取文本容并通过onDraw()方法把文件名、文本容、电量信息、时间
9、信息和已读百分比进行绘制成图片,并通过View来把绘制的图片显示出来。第一次进入阅读页面是会有显示引导页面来指导用户如何读本页面进行操作。本页面操作包括点击事件和滑动事件,点击左侧屏幕进行向上翻页,点击右侧屏幕进行向下翻页,点击屏幕中间画出菜单选项。此菜单是使用PopupWindow组件实现,菜单分上下两部分,上面的菜单有返回按钮、屏幕亮度调节按钮和添加书签按钮;下面的菜单有主题选择按钮、搜索按钮、书签按钮、目录按钮、字体大小调节按钮、翻页方式按钮、夜间模式切换按钮和退出软件按钮。6.系统设置。系统设置模块包括阅读设置和系统设置。阅读设置中有连续阅读模式、阅读完成时自动归类、阅读休息提醒和阅读
10、空闲退出。连续阅读模式:下次启动直接进入上次阅读的界面进行继续阅读;阅读完成时自动归类:当书籍阅读到最后一页后对此书籍自动移至“历史阅读”书架中;阅读休息提醒:设置一个时间,当用户在阅读页面停留至这个时间时会弹出个提示框来提醒用户进行休息;阅读空闲退出:设置一个时间,当用户停留在阅读界面并且为对其未进行任何操作至这个时间时,系统会自动关闭本软件。系统设置中有显示隐藏文件、使用软件密码、退出确认、使用帮助和关于。显示隐藏文件:当用户选择此设置后会在下次启动本软件时在文件浏览中显示隐藏文件;使用软件密码:用户可以对此软件进行密码设置;退出时确认:当选择此设置后,退出软件时会显示一个确认框进行退出确
11、认,未选择此设置时则会直接退出本软件;使用帮助:显示本软件的帮助信息;关于:显示关于本软件的信息。本软件的设置信息全部使用SharedPreferences存储。7.使用帮助。该模块通过读取帮助文件在TextView中显示,并且为TextView添加滚动条。文件中含有本软件的特点、功能介绍、操作说明等,。8.关于。该模块的主要功能是通过一个简单的弹出窗口来显示本软件的版本信息、联系方式。3项目功能描述3.1软件欢迎界面模块功能描述图4所示为欢迎界面模块,此模块作用是为了使软件的进入更连贯自然,让用户不感觉界面的出现突兀。两秒后跳入其它页面,如果有密码跳入密码验证页面如图6所示,如果是第一次启动
12、跳入引导页面如图5所示。图4 欢迎界面 图5 引导界面 图6 密码验证界面 关于欢迎页面启动的代码如下:new Handler().postDelayed(new Runnable() Override public void run() Intent intent=null; initSaveData(); /判断是否有密码 if(share.getString(mi_ma, ).equals() /判断是否为第一次启动 if(share.getBoolean(first, true) edit.putBoolean(, false); mit(); intent = new Intent(
13、WelcomeActivity.this, GuideMain.class); else ActivityMain.class); else intent = new Intent(WelcomeActivity.this, GestureVerifyActivity.class); intent.putExtra(from_activity, 0); startActivity(intent); finish(); , 2000); 关于引导界面滑动事件代码:Overridepublic boolean onTouch(View v, MotionEvent event) switch (e
14、vent.getAction() case MotionEvent.ACTION_DOWN: / 手指按下的X坐标 downX = event.getX(); break; case MotionEvent.ACTION_UP: float lastX = event.getX(); / 抬起的时候的X坐标大于按下的时候就显示上一图片 if (lastX downX) if (currentPosition 0) / 设置动画, mImageSwitcher.setInAnimation(AnimationUtils .loadAnimation( getApplication(), R.an
15、im.left_in); mImageSwitcher.setOutAnimation(AnimationUtils .loadAnimation( getApplication(), R.anim.right_out); currentPosition-; mImageSwitcher.setImageResource( imgIdscurrentPosition% imgIds.length); setImageBackground(currentPosition); else Toast.makeText(getApplication(), 向右滑动, Toast.LENGTH_SHOR
16、T).show(); if (lastX if (currentPosition imgIds.length - 1) .loadAnimation(getApplication(), R.anim.right_in); .loadAnimation(getApplication(), R.anim.left_out); currentPosition+; imgIdscurrentPosition); Intent intent = new Intent(GuideMain.this, startActivity(intent); finish(); return true; 通过xml设置
17、引导页面动画,代码如下(以向左滑动为例):set xmlns:android=schemas.android./apk/res/android /set3.2主界面功能描述图7所示是软件的主页面,这是一个通过TabHost标签组件来实现的一个分类管理功能。本界面的标签在屏幕的最下方,分别是文件管理、我的书架、我的设置。点击不同的标签则显示不同的界面,默认显示标签为我的书架,打开选项中会出现对应的视图。图7 软件主界面初始化选项卡代码如下:private void initTabs() myTabHost = (TabHost) findViewById(R.id.TabHost1); myTa
18、bHost.setup(this.getLocalActivityManager(); /添加文件管理选项 myTabHost.addTab(myTabHost .newTabSpec(tab_file) .setIndicator(composeLayout(文件管理, R.drawable.folders) .setContent( new Intent(this, FileExplorerActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);/添加我的书架选项tab_books我的书架 R.drawable.books) .s
19、etContent(new Intent(this, BookShelf.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); /添加我的设置选项tab_setting我的设置 R.drawable.setting) new Intent(this, MySetting.class) myTabHost.setCurrentTab(1); myTabHost.setOnTabChangedListener(new OnTabChangedListener(); updateTab(myTabHost);将程序关联成Android系统默认打开程序代码
20、:activity android:name=.zzu.ebookreader.ActivityMainintent-filter category android:android.intent.category.DEFAULT/categorydata android:mimeType=text/plain/data/intent-filter/activity接收从外部传来的参数并处理的代码:Intent intent = getIntent();String action = intent.getAction();if (intent.ACTION_VIEW.equals(action)
21、 String res_path = ; try res_path = URLDecoder.decode(intent.getDataString(), utf8 catch (UnsupportedEncodingException e) e.printStackTrace();3.3书籍管理模块功能描述图8所示是书籍管理主页面,最上面标题栏有导航按钮和书籍选择按钮。当点击导航按钮时会从左侧弹出导航栏如图9所示,并把书籍从每行显示三个调整到每行显示两个。当单击书籍时会打开相应的书籍阅读界面,长按某书籍时会弹出书籍操作窗口如图10所示,书籍操作窗口中有删除阅读记录、删除阅读记录和文件、移动到
22、历史书架、移动到收藏书籍、查看书籍详情和分享本书,不同书架中的操作项略有不同。 图8 书架效果页面 图9 导航栏页面 图10 书籍操作窗口初始化ViewPager的核心代码如下:private void InitViewPager() mPager = (ViewPager) findViewById(R.id.vPager); listViews = new ArrayList(); Intent intent = new Intent(BookShelf.this, BookShelfActivity.class); intent.putExtra(book_shelf, MyConstant.BOOKS_RECENTLY); listViews.add(getView(BookShelfRecently, intent); Intent intent2=new Intent(BookShelf.this, BookShelfActivity.class); intent2.putExtra(, MyConstant.BOOKS_HISTORY); listViews.add(getV
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1