`
luotuoass
  • 浏览: 639998 次
文章分类
社区版块
存档分类
最新评论

android项目源码解析03——vudroid阅读器源码解析02:屏幕滚动

 
阅读更多

vudroid在显示一本书的内容时,如果你滑动屏幕,则会有如下显示:


此图中,左上角蓝色区域显示当前页数,右上角显示红色圈内显示当前正在加载。

这里我们可以想到有两种实现方案:

1)在BaseViewerActivity中处理用户翻页操作,比如滑动、点击上下左右键等。此时根据具体的用户操作计算需要显示哪几页,通知DocumentView去显示这些页,同时更新图中的蓝圈及红圈区域。

2)在DocumentView中处理用户翻页操作,比如滑动、点击上下左右键等。此时根据具体的用户操作计算需要显示哪几页,显示这些页,同时通知BaseViewerActivity去更新图中的蓝圈及红圈区域。

如果我来设计,我会选择方案1。但是在vudroid这个项目中,作者选择了方案2,而且实现的很巧妙。我们只介绍图中篮圈中内容的实现机制,红圈中内容的实现类似。

我们先来看一下这里涉及到的类(下图是我用EA画的,由于对ea及uml不是很熟悉,因此下图难免有错):


具体的函数调用是按如下顺序进行的:

1、初始化:

BaseViewerActivity.onCreate()
currentPageModel = new CurrentPageModel();
currentPageModel.addEventListener(this)(实际上是调用了EventDispatcher.addEventListener(Object listener))

2、执行(函数调用顺序为从上往下):

DocumentView.scrollTo()DocumentView.onScrollChanged()DocumentView.currentPageModel.setCurrentPageIndex()EventDispatcher.dispatch(new CurrentPageListener.CurrentPageChangedEvent(currentPageIndex))CurrentPageListener.CurrentPageChangedEvent.dispatchOn(listener)CurrentPageListener.CurrentPageChangedEvent.dispatchSafely(CurrentPageListener listener)BaseViewerActivity.currentPageChanged(int pageIndex)(实际上是调用了CurrentPageListener.currentPageChanged(int pageIndex))

只要了解清楚,这其中涉及到的类关系,同时把握住上面这些函数的调用顺序,你就可以理清整个框架了。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics