`
microapple
  • 浏览: 15924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

书本翻页实现机制、方案及说明

 
阅读更多
书本翻页实现机制、方案及说明
1. 翻页项目:https://github.com/harism/android_page_curl
2. Android OpenGL ES:简明开发教程
3. CurlAcitivity.java(文件内包含多个类)代码说明:
3.1 首先需要确定照片书在屏幕的位置大小,SizeChangedObserver.java:

默认距离上边距(curlViewMarginTop)为屏幕的0.25(第一次循环就会由0.24增长到0.25),默认距离下边距(curlViewMarginBottom)为屏幕的0.12(第一次循环就会由0.11增长到0.12),然后根据上下边距和屏幕大小(curlview为全屏,屏幕大小即curlview的高度)算出屏幕上相册的高度,然后和模板里product的height的比率就是coverPageScreenAndRealRatio,结合相册高度和上下位置,就可以计算相册左右的边距curlViewMarginLeftOrRight。但因为相册很可能非常的宽,当上下确定时,左右可能会超出屏幕,所以这里用一个循环,当当前的左右边距为负数,即超出了屏幕时,就将上下边距加大,相册屏幕高度变小,最终得到一个合适的左右边距。
3.2 生成每一个页面的bitmap,PageProvider.java:
3.2.1.1 入口方法updatePage():
当页面初始化、用户翻页操作时,CurlView里都会调用updatePages方法,updatePages方法会调用PageProvider里的updatePage方法,返回当前页面的正反面的bitmap。

3.2.1.2 loadBitMapWithCache方法,主要功能是返回当前页面的bitmap,但也包括第一次生成所有相册页面的缩略图,将前后的页面装载到内存等功能。


3.2.1.3 preLoadPageImageOnCache方法是为了提高用户翻页的流畅性,确保当前页面前后的页面已经预加载到内存中的方法

3.2.1.4 writeOnToSDCard方法生成目标页码的缩略图,并加载页面到LruCache。
3.2.1.5 loadBitmap方法:根据模板生成缩略图。
4. CurlView中的onTouch方法:
翻页的行为:
拖拽速度足够时,按照拖拽的方向翻页;拖拽速度不够时按照手指最后的位置判断,手指在相册中线右侧则右翻,左侧则左翻,符合重力规律。

之前有较复杂的逻辑,当时需求是直接点击页面标题就可以进入改变标题的页面,现在已注释,不再赘述。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics