在写这个双页模式前,首先先借鉴了一下 http://blog.csdn.net/hmg25/article/details/6306479 这里的翻页原理
然后根据自己的理解实现了一下双页模式,但是在加贝塞尔曲线的时候,效果不是很理象,这里把自己的思路记录一下。
这里来讲述一下以右下角开始翻页(参见上图)
当我们开始翻动的时候,与X轴有交战P,与Y轴有交战Q
当X轴上的值(Px)小于View的一半的时候,我们需要重新计算这个点所带来的其他值,我们要将P点移动到M
这里已知T点,M点,O点三点坐标 线段MO=MS ,做垂线TB交PO于B,垂线SA交PO于A
求出S点坐标即可
已知T、M两点,可以求出TM的长,TB的长,MB的长,
MO = SM,显然 △TMB∽△SMA ,可以求出SA的长,MA的长,可解得S点坐标
这里S点 就是我们的Touch点坐标,根据这个新的Touch点我们去重新计算与X轴,Y轴的交点坐标等等
下面给出一个模型
public class TurnPage extends View {
/**
* 页角的枚举
*/
public enum Corner {
LeftTop,
LeftBottom,
RightTop,
RightBottom,
None
}
PointF touch = new PointF(); // 触摸点
PointF corner = new PointF(); // 页角点
PointF middle = new PointF(); // 触摸与页角的中点
PointF crossX = new PointF(); // 与X轴的焦点
PointF crossY = new PointF(); // 与Y轴的焦点
Corner footer = Corner.None; // 表示页脚
Path all = new Path(); // 全部掀起的Path
Path part = new