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

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

这一章专门讲一下单章阅读模块的实现。

该模块继承自安卓原生WebView。

一、首先,需要对手势操作进行拦截处理和分发,哪些需要WebView响应,哪些需要原生响应。这里通过GestureDetector类和重写onTouch方法来实现。包括单击、双击、长按、滑动等。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第1张图片

其中的难点在于操作边界的判定,即如果一个章节滑动到最顶部或者最底部了,继续滑动,此时需要把手势透传到父容器,实现章节切换的效果。其次是手势结束后自动保存阅读进度,如果是左右模式需要把界面恢复到整页位置(不允许翻一半)。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第2张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第3张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第4张图片

二、需要完成与js之间的交互。

onPageFinished中完成初始化方法。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第5张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第6张图片

自定义JavaBridgeController类统一处理所有的js回调。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第7张图片

方法太多,这里不一一说明,只说一下重点的几个功能吧。

1、笔记和画线功能的实现。首先,通过长按手势初始化选中的文字内容。长按手势触发后将当前x、y坐标传入,然后通过document.caretRangeFromPoint(x, y)方法获取range对象。然后阔选range最终拿到选中的文字类容。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第8张图片

然后为了显示自定义的光标,需要将选中文字块的坐标传递到原生控件中。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第9张图片

然后在原生界面中重写Ontouch实现对光标的拖拽,并将对应事件再传入WebView中进行处理

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第10张图片

拖拽光标,重新设置选中文字区域。松开光标,弹出菜单笔记菜单。这里做了一个反向选中效果,即拖拽光标越过另外一个光标时,将两个光标的首位位置互换,并将光标中间的文字选中。(效果参考掌阅APP)

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第11张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第12张图片

画线效果则通过CSS样式来实现。只需对选中标签添加如下class,并在结尾处添加下标图片。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第13张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第14张图片

2、答案遮挡效果。首先原文件对需要遮挡的部分进行处理,添加Class  “AnsTag”,然后初始化时只需对该标签进行处理,添加一个遮挡区域,并绑定点击事件来进行显示和隐藏。

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第15张图片

【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六)_第16张图片

好了,这一章基本介绍完毕。这样一款阅读器的基本框架就已经搭建完毕,剩下的就是在这个基础之上扩展功能就可以了。

关于阅读器的说明就暂时告一段落了,之后会更新一些关于视频播放器的内容。

你可能感兴趣的:(【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(六))