gpt4 book ai didi

java - Android 绘制路径未填满封闭区域

转载 作者:行者123 更新时间:2023-12-01 22:47:17 25 4
gpt4 key购买 nike

以下列表显示了 x,y 坐标以及用于创建路径的特定方法。

0 0 moveTO

180 0 lineTo

180 0 moveTO

246 227, 127 24, 115 150 cubicTo 127 276, 246 71, 180 300
cubicTo

180 300 moveTO

44 261, 166 332, 90 339 cubicTo

14 332, 136 261, 0 300 cubicTo

0 300 moveTO

0 0 lineTo

原始数据点

x = [0, 180, 180, 246, 127, 115, 127, 246, 180, 180, 44, 166, 90, 14,136, 0, 0, 0]

y = [0, 0, 0, 227, 24, 150, 276, 71, 300, 300, 261, 332, 339, 332,261, 300, 300, 0]

这个算法的想法是绘制四个边。两条边都是直线。其他两侧由贝塞尔曲线组成,每条曲线有七个点。这是使用 1 个 moveTo 和 2 个cubicTo 方法绘制的。

目前,如果我使用 Paint.Style.STROKE,它会创建一个闭合的不规则形状。当使用 Paint.Style.FILL 在 Canvas 上绘制它时,它仅填充形状的一部分,而在中间留出一个大的正方形部分。一些填充的部分超出了形状封闭区域。

paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
canvas.drawPath(path, paint);

我的目标是绘制一个覆盖这个封闭区域的位图。但是,由于填充路径没有正确填充该区域,我的目标无法实现。

有没有办法实现这一点。

谢谢

最佳答案

请发布您的实际代码。从您的格式来看,不清楚您是在到达一组点之后还是之前调用 moveTo 或 lineTo。

编辑:

moveTo 调用是不必要的,lineTo 和cubicTo 调用已经将您移动到新点。

您的代码:

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);

p.moveTo(0, 0);
p.lineTo(180, 0);
p.moveTo(180, 0);
p.cubicTo(246, 227, 127, 24, 115, 150);
p.cubicTo(127, 276, 246, 71, 180, 300);
p.moveTo(180, 300);
p.cubicTo(44, 261, 166, 332, 90, 339);
p.cubicTo(14, 332, 136, 261, 0, 300);
p.moveTo(0, 300);
p.lineTo(0, 0);

canvas.drawPath(p, paint);
}

制作了这个:

image with drawing error

删除 moveTo 调用(并使用 close() 而不是 lineTo(0,0)):

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);

p.lineTo(180, 0);
p.cubicTo(246, 227, 127, 24, 115, 150);
p.cubicTo(127, 276, 246, 71, 180, 300);
p.cubicTo(44, 261, 166, 332, 90, 339);
p.cubicTo(14, 332, 136, 261, 0, 300);
p.close();

canvas.drawPath(p, paint);
}

制作了这个:

fixed image

关于java - Android 绘制路径未填满封闭区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com