我想使用GC裁剪圆外的区域。
GC有setClipping (Rectangle rect)
,但没有用于圈子的setClipping。
有人知道怎么做吗?
答案 0 :(得分:1)
您必须使用其他方法:
public void setClipping(Region region)
在这里,您必须创建一个像这样的Region:
Region region = new Region();
int r = 10;
int x = 100;
int y = 100;
// int d = (2 * r); // diameter
region.add(circle(r, (x + r), (y + r)));
其中的圆圈是以下方法:
public static int[] circle(int r, int offsetX, int offsetY) {
int[] polygon = new int[8 * r + 4];
// x^2 + y^2 = r^2
for (int i = 0; i < 2 * r + 1; i++) {
int x = i - r;
int y = (int) Math.sqrt(r * r - x * x);
polygon[2 * i] = offsetX + x;
polygon[2 * i + 1] = offsetY + y;
polygon[8 * r - 2 * i - 2] = offsetX + x;
polygon[8 * r - 2 * i - 1] = offsetY - y;
}
return polygon;
}
答案 1 :(得分:1)
您可以使用GC.setClipping(Path path)
。
要创建代表圆形的路径,请创建一个空的Path
,然后使用addArc
向其添加一个圆形:
Path circlePath = new Path(gc.getDevice());
circlePath.addArc(x, y, width, height, 0.f, 360.f);
gc.setClipping(circlePath);