贝塞尔曲线和画布(Canvas)

21

我如何在画布(Canvas)上绘制贝塞尔曲线(Bezier Curve)。我只有起点和终点。我想从起点到终点绘制一条曲线。我该怎么做?

3个回答

31
您可以使用Path.quadTo()Path.cubicTo()来实现。示例可以在SDK示例(FingerPaint)中找到。在您的情况下,您只需要计算中间点,然后将这三个点传递给quadTo()
以下是一些代码:
  • (x1,y1)(x3,y3)分别是您的起始点和结束点。
  • 只需创建一次绘图对象(例如,在构造函数中)。
Paint paint = new Paint() {
    {
        setStyle(Paint.Style.STROKE);
        setStrokeCap(Paint.Cap.ROUND);
        setStrokeWidth(3.0f);
        setAntiAlias(true);
    }
};

final Path path = new Path();
path.moveTo(x1, y1);

final float x2 = (x3 + x1) / 2;
final float y2 = (y3 + y1) / 2;
path.quadTo(x2, y2, x3, y3);
canvas.drawPath(path, paint);

你能为这个曲线提供吗? - Smit Patel
3
如果你想要一条曲线,那么就需要改变控制点,这里是(x2,y2)。这会导致直线,一个快速的例子是: x2 =(x3 + x1)/ 3,y2 =(y3 + y1)/ 3。 - Sreekanth Karumanaghat

5

0

您需要设置颜色... 您的代码是正确的,只需将 x3,x3 更改为 x3,y3quadTO() 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接