0

我对java中的图形很陌生,我正在尝试创建一个剪辑到另一个形状底部的形状。这是我要实现的目标的示例:

http://i.stack.imgur.com/g3jKJ.png

形状底部的白线是圆形边缘内的那种剪裁。我现在这样做的方式是这样的:

g2.setColor(gray);
Shape shape = getShape(); //round rectangle
g2.fill(shape);
Rectangle rect = new Rectangle(shape.getBounds().x, shape.getBounds().y, width, height - 3);
Area area = new Area(shape);
area.subtract(new Area(rect));
g2.setColor(white);
g2.fill(area);

我仍在尝试使用剪辑方法,但似乎无法正确处理。这种当前方法是否可行(性能方面,因为组件经常重绘)还是有更有效的方法?

4

2 回答 2

1

这种当前方法是否可以(性能方面,因为组件经常重新绘制)..

减去形状是我的做法。对象可以是几个实例或(可能)根据需要转换的单个实例。

  1. 文字演示。,使用缩放和淡入淡出。
  2. 这是一个简单的线条(..和点,..它是动画的)。

当然,如果图像是纯叠加的,则使用 aBufferedImage作为画布并以 a JLabel/ImageIcon组合显示它。就像在这两个例子中一样。

于 2013-10-26T23:11:39.267 回答
1

我认为您关于使用剪辑方法的最初想法是正确的方法。这对我有用:

static void drawShapes(Graphics2D g, int width, int height,
    Shape clipShape) {

    g.setPaint(Color.BLACK);
    g.fillRect(0, 0, width, height);

    g.clip(clipShape);

    int centerX = width / 2;
    g.setPaint(new GradientPaint(
        centerX, 0, Color.WHITE,
        centerX, height, new Color(255, 204, 0)));

    g.fillRect(0, 0, width, height);

    g.setPaint(Color.WHITE);
    int whiteRectHeight = height * 4 / 5;
    g.fillRect(0, whiteRectHeight,
        width, height - whiteRectHeight);
}
于 2013-10-26T23:41:52.960 回答