![Android App开发进阶与项目实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/109/44510109/b_44510109.jpg)
4.2.2 实现平滑翻书效果
与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图。然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍并不相像。若想让手机电子书更贴近纸质书的阅读体验,就得重新设计上下翻动的视图,比如图4-13所示的平滑翻页效果,上下两页存在遮挡的情况,并且下面那页在未完全显示出来之前呈现阴影笼罩的效果。
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P133_8403.jpg?sign=1739357198-3IthyJmVVzkDciWRaILK70LF9ZJDkSr6-0-75dea03cdece5b5062a92b549e649bba)
图4-13 平滑翻页的显示效果
从图4-13所示的效果图可以看到,此时的书页应当具备下列视图特征:
(1)能够容纳图片在内的多个控件,意味着自定义视图必须由某种布局派生而来。
(2)书页存在两种状态:未遮挡时的高亮状态、被遮挡时的阴影状态。
(3)鉴于书页允许拉动,考虑给它设置左侧间距。左侧间距为零时,该页完整显示;左侧间距为负值时,该页向左缩进。
按照上述三点要求实现的书页视图的示例代码如下:
(完整代码见ebook\src\main\java\com\example\ebook\widget\PageView.java)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P134_17456.jpg?sign=1739357198-BigC9RAvH4jznmFKZo1M8yNHOvHYyGuS-0-3e94d875e07232aab5dddf28f2aca194)
接着自定义滑动视图,用来容纳多个书页视图,以便模拟电子书的翻页浏览功能。滑动视图待实现的几处细节说明如下:
(1)支持传入图片路径列表,每张图片都做成书页视图,然后添加至滑动视图容器当中。
(2)重写onTouchEvent方法,根据手势的滑动距离实时设置当前书页的左侧间距。
(3)声明一个滚动器对象,并在手势松开后启动滚动器,同时重写computeScroll方法,在滚动过程中持续计算并设置当前书页的左侧间距。
(4)滚动结束后,确保上层书页视图高亮显示(没有覆盖一层阴影)。
根据上述说明实现的滑动视图的示例代码片段如下:
(完整代码见ebook\src\main\java\com\example\ebook\widget\ViewSlider.java)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P135_8416.jpg?sign=1739357198-1zQKMZwRkKJCYRb4AVe64yYg6I69xdTA-0-6956bb6828f5a5db1bb2f1bd85dad8e4)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P136_17457.jpg?sign=1739357198-DwZVLVUYFky7S9qblV5tNKQNDKLHdYhs-0-c6a8d118e76ef13be7224223bed43e32)
滑动视图编写完成之后,在布局文件中添加ViewSlider节点,并在对应的活动页面给滑动视图设置图片路径列表,剩下的手势滑动操作就由滑动视图接管了。运行并测试该App,可通过滑动手势来控制平滑翻书,划了几下观察到翻书效果如图4-14和图4-15所示。图4-14为当前页向左滑动且即将松开手指的画面,由于此时当前页左滑超过二分之一,因此松开后会继续向左滚动,快要滚动结束时的画面如图4-15所示,这便是滑动惯性使然。
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P136_8424.jpg?sign=1739357198-soG9qOwDNQAo6YNPHzDTz39wRcqjqMWS-0-f91800826d3f14802fad6a9d6a40f96b)
图4-14 即将松开手指的画面
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P136_8425.jpg?sign=1739357198-qtBHwHcLT9WVTxa21LkUprvCJkp62kus-0-456b234087ca5c8691f4bd1d44221bdd)
图4-15 快要滚动结束时的画面