以下列表显示了用于创建路径的x,y坐标和特定方法。
0 0 moveTO
180 0 lineTo
180 0 moveTO
246 227,127 24,115 150立方吨 127 276,246 71,180 300立方米
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,02,224,24,150,276,71,300,300,261,332,339,332,261,300,300,0]
这个算法的想法是画出四个方面。两边是直线。其他两方面 由每条曲线中有七个点的贝塞尔曲线组成。这是使用1 moveTo和2 cubicTo方法绘制的。
目前,如果我使用Paint.Style.STROKE,它会创建一个封闭的不规则形状。当使用Paint.Style.FILL在画布上绘制时,它仅填充形状的一部分,在中间留下一个大的方形部分。已填充的部分零件位于封闭区域外。
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
canvas.drawPath(path, paint);
我的目标是绘制一个覆盖这个封闭区域的位图。但是,由于填充路径未正确填充区域,因此无法实现目标。
有没有办法实现这一点。
谢谢
答案 0 :(得分:3)
请发布您的实际代码。如果您在到达点集之后或之前调用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);
}
产生了这个:
删除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);
}
产生了这个: