奇怪的是没有人提供答案,一旦我找到它(不容易找到),它真的很简单。
所以,它的工作方式是这样的:
假设您想在 12 - 3 处绘制圆角(使用时钟参考):
你开始你的路径,当你需要这条线形成弧线时,你定义一个矩形,它的左上角是你的线当前终止的地方,它的右下角是你想要弧线到达的地方,所以如果你想象一个 X,Y 为 12(时钟上)且 X+W,Y+H 为 3 的正方形,这就是您需要的正方形。
现在,假设您在该正方形中有一个椭圆形(在本例中,它是一个圆形椭圆形,如果您希望曲线更加椭圆形,则将正方形定义为矩形),您可以使用该圆的任何切片该方法的最后两个参数。第一个参数定义要开始切割的角度。如果我们使用指南针,0 度是东(不知道为什么,我不是几何专家...这正常吗?我总是认为 0 是北,但我看到的所有编程几何示例都将 0 作为东方,也许有人会评论为什么会这样)。
第二个参数定义了您想要的圆的大小。如果你想要整个圆,你就输入360;如果你想要半个圆,你就输入180等等。
因此,在我们的例子中,由于我们想要将角从 12 转为 3,因此我们将 270 作为起始度数并获取圆的 90 度。
最后,当您完成此过程后,该线路现在认为自己处于下午 3 点,因此您可以从那里继续 lineTo(ing)。
所以...这是我的形状的固定代码(它里面有一个小三角形,但这既不在这里也不在那里,实际的圆形部分是 B-C、D-E、I-J 和 K-A。其余的都是直线。
int arc = 25;
public Cursor(int X, int Y, int W, int H){
/*
* A B
* K C
* J D
* I H F E
G
*/
int Ax = X+ arc;
int Ay = Y;
int Bx = X + W - arc;
int By = Y;
int Cx = X + W;
int Cy = Y + arc;
int Dx = Cx;
int Dy = (Y + arc) + (H - arc*2);
int Ex = Bx;
int Ey = Y + H;
int Fx = X+W/2 +6;
int Fy = Ey;
int Gx = X+W/2;
int Gy = Y+H+8;
int Hx = X+W/2-6;
int Hy = Ey;
int Ix = Ax;
int Iy = Hy;
int Jx = X;
int Jy = Dy;
int Kx = X;
int Ky = Cy;
Path ctx = new Path();
ctx.moveTo(Ax,Ay); //A
ctx.lineTo(Bx,By);//B
ctx.arcTo(new RectF(Bx, By, Cx, Cy), 270, 90); //B-C arc
ctx.lineTo(Dx,Dy); //D
ctx.arcTo(new RectF(Dx - arc, Dy, Ex + arc, Ey),0,90); //D-E arc
ctx.lineTo(Fx, Fy); //E-F
ctx.lineTo(Gx, Gy); //F-G
ctx.lineTo(Hx, Hy); //G-H
ctx.lineTo(Ix, Iy); //H - I
ctx.arcTo(new RectF(Jx, Jy, Ix, Iy),90,90);// I = J arc
ctx.lineTo(Kx, Ky); //K
ctx.arcTo(new RectF(Ax - arc, Ay, Kx + arc, Ky),180,90); //K - A arc
ctx.lineTo(Ax, Ay); //K
Paint p = new Paint();
p.setAntiAlias(true);
p.setColor(0xffffffff);
p.setStyle(Style.FILL);
canvas.drawPath(ctx, p);
p.setColor(0xff000000);
p.setStyle(Style.STROKE);
p.setStrokeWidth(3);
canvas.drawPath(ctx, p);
}