我需要画一个由一定百分比填充的圆圈。我试过圆弧,但那只是一个奇怪的圆圈。最终结果应该类似于this。当我甚至不能画一个x%填充的圆圈时,我不知道如何完成这件事。我可以通过叠加彩色和白色的圆圈来画出我想要的其余部分,但是如果我必须在顶层怪异地剪切,那就没有用了。
我尝试过的代码如下:
int tx=300;
int ty=200;
int tr=100;
PdfCanvas canvas1 = new PdfCanvas(pdfPage);
canvas1.setColor(Color.GRAY, true);
canvas1.circle(tx, ty, tr);
canvas1.fill();
PdfCanvas canvas11 = new PdfCanvas(pdfPage);
canvas11.setColor(Color.WHITE, true);
canvas11.circle(tx, ty, tr-10);
canvas11.fill();
PdfCanvas canvas2 = new PdfCanvas(pdfPage);
canvas2.setColor(Color.GREEN, true);
canvas2.arc(tx-tr-10, ty-tr-10, tx+tr+10, ty+tr+10,90,87);//87 is just for testing
//canvas2.circle(tx, ty, tr+20);
canvas2.fill();
PdfCanvas canvas22 = new PdfCanvas(pdfPage);
canvas22.setColor(Color.WHITE, true);
canvas22.circle(tx, ty, tr-20);
canvas22.fill();发布于 2019-01-05 20:57:49
首先,我看到您使用的是iText 7.0.x版本(因为颜色常量在Color类中),而7.1.x已经发布了很长一段时间,而7.1.4是目前最新的版本。我建议您尽可能早地在项目中切换到新行,因为这是目前正在积极维护的版本行。API在7.0和7.1之间的差别非常小,但在您的示例中,您必须使用ColorConstants类而不是Color。
而且,不需要每次都创建新的PdfCanvas实例。您可以使用一个实例。如果需要,您可以调用saveState()和restoreState(),以便您的颜色、线宽等设置仅适用于保存和恢复状态之间的操作。
您使用PdfCanvas#arc的方法实际上是有效的,但您需要考虑绘制弧线而不是填充弧线。如果我稍微修改一下你的代码:
int centerX = 300;
int centerY = 200;
int radius = 100;
float fillPercent = 80;
float circleThickness = 10;
float arcThickness = 15;
PdfCanvas canvas = new PdfCanvas(pdfPage);
canvas.setFillColor(ColorConstants.GRAY);
canvas.circle(centerX, centerY, radius);
canvas.fill();
canvas.setFillColor(ColorConstants.WHITE);
canvas.circle(centerX, centerY, radius - circleThickness);
canvas.fill();
canvas.setStrokeColor(ColorConstants.GREEN);
canvas.setLineWidth(arcThickness);
canvas.arc(centerX - radius + circleThickness / 2, centerY - radius + circleThickness / 2,
centerX + radius - circleThickness / 2, centerY + radius - circleThickness / 2, 90, -fillPercent / 100 * 360.);
canvas.stroke();我可以实现以下结果:

https://stackoverflow.com/questions/54041133
复制相似问题