您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

安卓翻页效果的实现

2023/3/6 12:27:25发布44次查看
安卓翻页效果的实现
效果如下:
想法:计算每个顶点作为路径连接,如图所示
让屏幕的右下角是原点,e是手指触摸屏幕的坐标。让我们首先计算点f1和f2的坐标
这里em代表两点之间的距离,下面和上面一样!
em=o.y-e.y(屏幕高度y坐标-e),om = o . x-e . x;(。x代表点的x坐标)
方程ef1-f1m = em(勾股定理)ef1-f1m=om是已知的。因为em=of1
=&gt。(ef1+f1m)*(ef1-f1m)=em
=&gt。(2*ef1-om)* om=em
=&gt。ef1 =(em/om+om)/2;
=&gt。f1 . x = 0 . x-ef1
“”java
//pointf e查找f1坐标
float om = getmeasuredwidth()-em . x;
float em = getmeasuredheight()-em . y;
float ef1 =(em * em/om+om)/2;
f1 . 骨子无错版x = getmeasuredwidth()-ef1;
f1 . y = getmeasuredheight();
``
根据公式,f1坐标可以计算,f2坐标也可以同样的方式计算。注应该有一个更简单的公式,但我在高中和大学数学中忘记了。。。简而言之,首先计算f1和f2的坐标);
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
然后计算a1和a2
这里设a1 . x = f1 . x-(0 . x-f1 . x)/2
浮子a1x = f1 . x-(o . x-f1 . x)/2;
pointf a1 =新pointf(a1x,视图高)
用同样的方法得到a2
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
然后计算c1和c2
c1实际上是直线a1 - a2和直线e-f1的交点:
用直线函数求两条直线的交点,如下:
“”java
公共点f getintersection(点f点f1、点f点f2、点f点f3、点f点f4){
//第一条直线
浮点x1 =点f1.x,y1 =点f1.y,x2 =点f2.x,y2 =点f2 . y;
浮点a =(y1-y2)/(x1-x2);
浮动b =(x1 * y2-x2 * y1)/(x1-x2);
//第二条直线
浮点x3 =点f3.x,y3 =点f3.y,x4 =点f4.x,y4 =点f4 . y;
浮动c =(y3-y4)/(x3-x4);
浮点d =(x3 * y4-x4 * y3)/(x3-x4);
浮点x =((x1-x2)*(x3 * y4-x4 * y3)-(x3-x4)*(x1 * y2-x2 * y1))
/((x3-x4)*(y1-y2)-(x1-x2)*(y3-y4));
双y =((y1-y2)*(x3 * y4-x4 * y3)-(x1 * y2-x2 * y1)*(y3-y4))
/((y1-y2)*(x3-x4)-(x1-x2)*(y3-y4));
pointf pointf =新pointf修罗武神最新章节((int)x,(int)y);
返回点f;
{}
``
然后找到b1和b2
b1位于三角形a1-c1-f1
zx p1 . x =((zp1 . x+焦1 . x)/2+p2 . x)/2;
“”java
pointf b1 =新pointf();
b1 . x =((a1 . x+c1 . x)/2+f1 . x)/2;
b1 . y =((a1 . y+c1 . y)/2+f1 . y)/2;
//b2以同样的方式
``
将获得的点与路径对象连接的效果如下:
填充效果:
这看起来很尴尬,因为当连接c1 - b1和b1 - a1时,用lineto绘制直线函数连接。这里,您需要使用贝塞尔曲线路径。
和path . quad to();该函数需要确定偏移点
接下来,计算偏移点d1 d2 g1 g2
d1和d2很容易找到,即直线ef1和ef2与直线b1b2的交点,这可以通过上述函数获得
“”java
d1=getintersection(b1,b2,e,f1);
d2=getintersection(b1,b2,e,f2);
``
g1的y坐标是视图的高度,它在直线b1 - b2上
“”java
//线性函数为y = kx+b;计算k,b
公共空间获取直线函数(点f1,点f2){//直线函数决定直线函数
//y = kx+b;x=(y-b)/k
浮点x1 =点f1.x,y1 =点f1.y,x2 =点f2.x,y2 =点f2 . y;
浮点k =(y2-y1)/(x2-x1);//k
float b = y1-(y2-y1)/(x2-x1)* x1;//b
g1 . y = getmeasuredheight();
g1 . x =(g1 . y-b)/k;
g 2 . x = getmeasuredwidth();
g2 . y = k * g2 . x+b;
{}
``
“”java
//获取g1、g2
getlinefun(b1,b2)
``
最后,连接c1 - b1转移到b1,b1 - a1转移到g1
黄色区域最终代码:
“”java
path.moveto(e.x,e . y);
path.lineto(c1.x,c1 . y);
path.quadto(d1.x,d1.y,b1.x,b1 . y);//到点d1的偏移
path.quadto(g1.x,g1.y,a1.x,a1 . y);//到点g1的偏移
path.quadto(g1.x,g1.y,b1.x,b1 . y);//返回b1
path.lineto(b2.x,b2 . y);
path.quadto(g2.x,g2.y,a1.x,a1 . y);
path.quadto(g2.x,g2.y,b2.x,b2 . y);
path.quadto(d2.x,d2.y,c2.x,c2 . y);
path.quadto(e.x,e . y);//回到原点
``
最后,使用画布。剪辑路径(路径)连接蓝色区域与路径;剪掉画布,完成它!
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
文章来源:www.atolchina.com
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product