`
isiqi
  • 浏览: 16021334 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android项目源码解析03——vudroid阅读器源码解析01:主界面

 
阅读更多

vudroid是一款能读PDF和djvu两种格式的阅读器,其特点是能够跳页、全屏阅读、能够一次两页连续缓冲、能自由进行页面的缩放、能记忆阅读位置、划屏翻页流畅。其缺点是当文件大时,渲染速度较慢,偶尔会退出。

在分析vudroid源码的过程中,我们将其分为三个部分:

1)操作主界面(选择文件、浏览阅读历史部分)

2)阅读界面(涉及阅读时的操作、事件处理)

3)源文件解析部分(主要是读取PDF和djvu文件部分,该部分涉及对相关文件的格式解析)

1、主界面

vudroid的主界面 比较简单,主要包括一个文件浏览界面和一个浏览阅读历史界面,使用一个tabHost来实现 ,其界面如下:


browse界面浏览sdcard文件夹,显示其中的文件目录,对于文件只显示pdf、djvu、djv三种格式文件。而recent则显示最近浏览过的文件列表。

这一部分的实现是比较简单的,主要包括了3个文件:


1、MainBrowserActivity

我们先来看看MainBrowserActivity.java的源码:

这里将所有与界面相关的东西都留给BaseBrowserActivity.java去做了。MainBrowserActivity只负责判断可以阅读类型的文件,并转到相关的处理处理类去处理。MainBrowserActivity重载了createFileFilter函数,用于建立一个文件筛选器。这实际上是一个解耦合的过程,后续需要添加其他格式的文件,如txt,则只需修改createFileFilter函数即可,而没有必要动BaseBrowserActivity中的代码。

2、BaseBrowserActivity

对于BaseBrowserActivity文件,其实可以猜到它所完成的功能:生成两个listview去填充tabHost。于是看它的oncreate函数:

这里对于tabHost的两个tab:第一个browse,需要显示当前文件目录,点击文件夹时显示下一个文件夹目录,而点击文件时则转到浏览该文件的activity;而第二个recent,则只需要做到点击文件时,转到浏览该文件的activity即可。于是我们可以看到,这两个tab中listview的setOnItemClickListener是有区别的。

对于browse:

而对于recent:

从源码可以看出,这两者的区别是显而易见的。

3、ViewerPreferences

ViewerPreferences文件主要是利用SharedPreferences存储了两个参数:是否全屏(FULL_SCREEN)、最近浏览文件列表。

对于最近浏览文件,其代码为:

4、adapter

项目中用到的两个Adapter都是重载过的:BrowserAdapter和UriBrowserAdapter。

Adapter的作用主要是连接view和dataset。其中有一个比较重要的函数是getView,每个数据集的一条数据会生成一个view,该view就是通过该函数得来的。因此如果你如果要让一个view显示自己的数据,就必须重载该函数。

另外,Adapter的数据集在发生变化时,需要通知view去改变,是通过notifyDataSetInvalidated()函数完成的。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics