在Android中Path类中其实是有已经封装好了关于贝塞尔曲线的函数的 //二阶贝赛尔 public void quadTo(float x1, float y1, float x2, float...float x3, float y3) public void rCubicTo(float x1, float y1, float x2, float y2,float x3, float y3) quadTo...(float x1, float y1, float x2, float y2) { isSimplePath = false; native_quadTo(mNativePath....y, mFirst.x, mFirst.y); mPath.quadTo(mControlFirst.x, mControlFirst.y, mSecond.x, mSecond.y)...; mPath.quadTo(mControlSecond.x, mControlSecond.y, mRight.x, mRight.y); mPath.lineTo(
(getWidth()/2,getHeight()*3/10+5,getWidth()/2+6,getHeight()*3/10);// 上中 generalPath.quadTo(getWidth()...*5/8,getHeight()*2/10,getWidth()*3/4,getHeight()*2/10);// 右上 generalPath.quadTo(getWidth(),getHeight(...)*2/10+10,getWidth()-5,getHeight()*2/5); generalPath.quadTo(getWidth(),getHeight()*3/5,getWidth()/2+5...,getHeight()*4/5); generalPath.quadTo(getWidth()/2,getHeight()*4/5+3,getWidth()/2-5,getHeight()*4/5);...generalPath.quadTo(10,getHeight()*3/5,5,getHeight()*2/5); generalPath.quadTo(0,getHeight()*2/10,getWidth
waveY = height * ratio; wavePath.reset(); wavePath.moveTo(0, waveY); wavePath.quadTo...(centerX / 2, waveY + 20, centerX, waveY); wavePath.quadTo(centerX + (width - centerX) / 2, waveY...- 20, width, waveY); wavePath.quadTo(centerX * 2 + (width - centerX) / 2, waveY + 20, centerX...* 3, waveY); wavePath.quadTo(centerX * 3 + (width - centerX) / 2, waveY - 20, centerX * 4, waveY
我们先来看看quadTo函数的用法,其定义如下: 参数中(x1,y1)是控制点坐标,(x2,y2)是终点坐标 。...整条线的起始点是通过Path.moveTo(x,y)来指定的,而如果我们连续调用quadTo(),前一个quadTo()的终点,就是下一个quadTo()函数的起点;如果初始没有调用Path.moveTo...rQuadTo这个函数和quadTo用法类似,其区别是其参数中控制点(dx1,dy1)和终点(dx2,dy2)的坐标值是相对于此贝塞尔曲线起点的相对坐标值,而不是和quadTo一样是绝对坐标值。...因此,下面这两段代码是等价的: 利用quadTo定义绝对坐标: path.moveTo(300,400); path.quadTo(500,300,500,500); 与利用rQuadTo定义相对坐标:...在开篇讲quadTo()函数时,就已经说过,第一个起始点是Path.moveTo(x,y)定义的,其它部分,一个quadTo的终点,是下一个quadTo的起始点。
Path类有4个贝塞尔曲线相关方法: //二阶贝赛尔 public void quadTo(float x1, float y1, float x2, float y2) public void...一、 下面的方法中 ,参数中(x1,y1)是控制点坐标,(x2,y2)是终点坐标 public void quadTo(float x1, float y1, float x2, float y2)...实际上连续使用quadTo()方法的时候,上一次使用的终点坐标即下一次的起始坐标 而一开始我们需要用moveTo()来指定一个起始坐标,如果不指定的话,起始坐标默认为左上角(0,0) 下面通过实现绘图板功能来看一下使用...return true; } case MotionEvent.ACTION_MOVE: { // 触摸过程中,用贝塞尔曲线方法 quadTo...举例: path.moveTo(100,100); path.quadTo(300,50,500,500); 相等于 path.moveTo(100,100); path.rQuadTo(
在Path添加点坐标的时候,使用Path#quadTo(float,float,float,float) 代替 Path#lineTo(float,float) 。...lineTo(float,float) 从上一个点到某个指定的点新增一条线 quadTo(float,float,float,float) 从上一个点到某个指定的点新增一条二次方的贝塞尔曲线 项目中用的时候...,又小优化了一下,代码如下: if (Math.abs(lastX - x) < 3 && Math.abs(lastY - y) < 3) { } else { mPath.quadTo(lastX
Path(); //四个角:右上,右下,左下,左上 path.moveTo(leftTopRadius, 0); path.lineTo(width - rightTopRadius, 0); path.quadTo...(width, 0, width, rightTopRadius); path.lineTo(width, height - rightBottomRadius); path.quadTo(width,...height, width - rightBottomRadius, height); path.lineTo(leftBottomRadius, height); path.quadTo(0, height..., 0, height - leftBottomRadius); path.lineTo(0, leftTopRadius); path.quadTo(0, 0, leftTopRadius, 0);
*/ public void moveTo(float x, float y) { nMoveTo(mNativePath, x, y); } 然后调用 Path#quadTo...param y1 二次曲线上控制点的y坐标 * @param x2 二次曲线端点的x坐标 * @param y2 二次曲线端点的y坐标 */ public void quadTo...); // 设置起始点 path.moveTo(0, getHeight() / 2F); // 设置控制点 和 终止点 path.quadTo
= 0) { mRoundPath.moveTo(0, mLeftTopRadius); mRoundPath.quadTo(0, 0, mLeftTopRadius,...= 0) { mRoundPath.lineTo(width - mRightTopRadius, 0); mRoundPath.quadTo(width, 0, width...= 0) { mRoundPath.lineTo(width, height - mRightBottomRadius); mRoundPath.quadTo(width...= 0) { mRoundPath.lineTo(mLeftBottomRadius, height); mRoundPath.quadTo(0, height, 0,
float x4 = mX1 + offsetX; float y4 = mY1 - offsetY; mPath.reset(); mPath.moveTo(x1, y1); mPath.quadTo...((mX1 + mX2) / 2, (mY1 + mY2) / 2, x2, y2);//锚点直接取偏移量的一半 mPath.lineTo(x3, y3); mPath.quadTo((mX1 +...float x4 = mX1 + offsetX; float y4 = mY1 - offsetY; mPath.reset(); mPath.moveTo(x1, y1); mPath.quadTo...((mX1 + mX2) / 2, (mY1 + mY2) / 2, x2, y2);//锚点直接取偏移量的一半 mPath.lineTo(x3, y3); mPath.quadTo((mX1 +
从上图可知, 二阶是只有一个控制点,对应quadTo(float x1, float y1, float x2, float y2),其中(x1,y1)是控制点,(x2,y2)是结束点。...其中头部圆和尾部圆都是用drawCircle进行绘制,粘连体通过p1、p2、p3、p4、控制点采用quadTo绘制两条二阶贝塞尔曲线并分别连接p1p3、p2p4闭合起来,取两圆心距离的中点为控制点,通过拖拽过程中两圆心的距离之比来控制头部圆的放大缩小即可...mHeaderCircle.y + mFooterCircle.y ) / 2; /* 画贝塞尔曲线 */ mPath.reset(); mPath.moveTo(headerX1, headerY1); mPath.quadTo...(anchorX, anchorY, footerX1, footerY1); mPath.lineTo(footerX2, footerY2); mPath.quadTo(anchorX, anchorY
android中自带实现二阶贝塞尔曲线的api,在Path类中的函数quadTo 。...public void quadTo (float x1, float y1, float x2, float y2) 其中(x1,y1)是上图中控制点p1的坐标,(x2,...(rArc/mWidth); pathRipple = new Path(); pathRipple.moveTo(-6 * cycleWidth + moveSet, 0); pathRipple.quadTo...(-5 * cycleWidth + moveSet, cycleHeight, -4 * cycleWidth + moveSet, 0); pathRipple.quadTo(-3 * cycleWidth...+ moveSet, -cycleHeight, -2 * cycleWidth + moveSet, 0); pathRipple.quadTo(-cycleWidth + moveSet, cycleHeight
第三组:画贝赛尔曲线 quadTo,cubicTo 二次贝塞尔曲线以及三次贝塞尔曲线 1.quadTo //quadTo方法其中 (x1,y1) 为控制点,(x2,y2)为结束点。...public void quadTo(float x1, float y1, float x2, float y2) ?...解释:其中quadTo的前两个参数为控制点的坐标,后两个参数为终点坐标,至于起点默认是画布的左上角。这里的p0就是起点,(x1,y1)就是中点P1,(x2,y2)就是末端点P2。...2、cubicTo //cubicTo方法比quadTo方法多了一个点坐标,那么其中(x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。...解释:与quadTo类似,前四个参数表示两个控制点,最后两个参数表示终点。其实,(x1,y1)就是P1,(x2,y2)是P2,(x3,y3)是P3。
) 方法就可以达到画笔渐变色的效果,然后再创建一个 Rect 对象,这里只是创建了一个矩形对象,要想绘制弧形,我们还需要设置绘制的路径,创建一个 Path 对象,分别调用 moveTo() 方法,和 quadTo...() 方法,moveTo ()不会进行绘制,只用于移动移动画笔,一般和其他方法配合使用,这里和 quadTo() 方法配合使用,而 quadTo() 用于绘制圆滑的曲线,即贝塞尔曲线。...mPath.quadTo(x1, y1, x2, y2) 其中x1、y1 为控制点,x2、y2 为结束点。...mArcHeight); mPath = new Path(); mPath.moveTo(0, mHeight - mArcHeight); mPath.quadTo
height/2, radius, mBgCirclePaint); //贝塞尔曲线 mPath.reset(); mPath.moveTo(startP.x, startP.y); mPath.quadTo...(controllerP1.x, controllerP1.y, nextP.x, nextP.y); mPath.quadTo(controllerP2.x, controllerP2.y, threeP.x..., threeP.y); mPath.quadTo(controllerP3.x, controllerP3.y, fourP.x, fourP.y); mPath.quadTo(controllerP4
2、使用贝塞尔曲线后 将上面函数lineTo()改为quadTo() public class MySecondView extends View { private Path mPath=new Path...MotionEvent.ACTION_MOVE: float endX=(mPreX+event.getX())/2; float endY=(mPreY+event.getY())/2; //quadTo...前两个参数是控制点,后两个是终点 mPath.quadTo(mPreX, mPreY, endX, endY); mPreX=event.getX(); mPreY=event.getY
如果想象不出来的话可以看wiki上的这个图, Android实现 在Android上的实现非常简单,Path类已经帮我们完成了计算的过程, 它提供了几个方法分别用来描述贝塞尔曲线,对于二阶曲线来说用的是quadTo...以二阶为例, Path path = new Path(); path.moveTo(start.x, start.y); path.quadTo(control1.x, control1.y, end.x
GeneralPath(GeneralPath.WIND_EVEN_ODD); polygon.moveTo(getWidth()/2,margin); polygon.quadTo...,margin+(leftY-margin)*3/5,margin,leftY); for (int i = 1; i < 6; i++) { polygon.quadTo...(margin+step*i*3,leftY,margin+step*i*3,leftY-3); polygon.quadTo(margin+step*i*3,leftY+3,margin...(margin+step*i*3,leftY,margin+step*i*3,leftY-3); polygon.quadTo(margin+step*i*3,leftY+3,margin...+step*(i*3+4),leftY+step*2-(7-i)); } polygon.quadTo(getWidth()/2+5,margin+(leftY-margin
smallR; x4 = bigx + (float) (Math.sqrt(bigR * bigR - smallR * smallR)); } path.moveTo(x1, y1); path.quadTo...((bigx + smalx) / 2, mheight / 2, x2, y2); // 绘制贝赛尔曲线(Path) path.lineTo(x3, y3); path.quadTo((bigx +...smallR; x4 = bigx - (float) (Math.sqrt(bigR * bigR - smallR * smallR)); } path.moveTo(x1, y1); path.quadTo...((bigx + smalx) / 2, mheight / 2, x2, y2); // 绘制贝赛尔曲线(Path) path.lineTo(x3, y3); path.quadTo((bigx +
通过拖拽控制点的位置同步设置到(quadTo,cubicTo)即可实现绘制更新曲线。
领取专属 10元无门槛券
手把手带您无忧上云