【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(三)

时间:2024-03-28 22:04:06

上一章传送:https://blog.csdn.net/mzy24511cs/article/details/80437018

上一章我们了解了Epub的文件结构。确定了实现逻辑如下:根据ncx核心文件解析出章节目录,然后按照目录加载每一章。

阅读器框架初期设计为:整本书内容放到一个Html里,每一章用一个div加载。这样还可以写一个默认的CSS样式来显示加载动画。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(三)

后来发现这个设计有缺陷,如果一本书章节过多,例如四大名著这种的,或者书里有太多的多媒体文件,我遇见过一本书有五千多张图片,加载完整本书非常慢,并且加载完成后非常卡,内存消耗过大根本顶不住。网上找了很多方法想让WebView实现RecycleView的性能,只加载显示出来的部分以降低内存消耗,可惜没找到合适方案。最后不得已修改了设计框架。

阅读器框架最终设计:整本书内容放到一个自定义的View里(继承RelativeLayout),每一章用一个WebView加载。这样我可以控制最大加载的章节数量,解决了内存问题。但是需要重写相关手势实现滑动、翻页效果。并且自动加载和回收章节的逻辑也需要自己实现。这个自定义的View可以理解为ViewPager和ListView的结合体。

所以原生的代码里关键的View就这两个。一个是整本书的内容加载器,继承RelativeLayout,用于承载章节WebView以及菜单、目录、工具栏等一切扩展工具;一个是单章内容的加载器,继承WebView,用于实现加载每一章的内容以及一切JS相关交互。

OK,设计工作做到这里就十分清晰了。下面将详细讲解这两个原生View的重要功能和代码块。

下一章传送门:https://blog.csdn.net/mzy24511cs/article/details/80563448