在Java Swing中淡化一部分Graphics

时间:2012-05-03 13:50:26

标签: java swing animation alpha-transparency

我正在尝试在摇摆中实现淡入/淡出动画。 我正在使用一个没有任何组件的JPanel。它完全由paintComponent()方法绘制。

现在在这个JPanel的一部分中,我想实现淡入/淡出动画。当我尝试使用AlphaComposite时,整个JPanel都会触发动画。

我可以在该面板的一个小剪裁区域中限制此动画吗?

Graphics2D g2d = (Graphics2D) g;
    g2d.setComposite(AlphaComposite.getInstance(
            AlphaComposite.XOR, alpha));

3 个答案:

答案 0 :(得分:1)

您是否尝试过使用Graphics对象(如矩形,圆形等)进行淡入/淡出?这样就不会触发完整的面板。

祝你好运!

答案 1 :(得分:1)

也许,但这可能比它的价值更难实现。创建一个您要设置动画(或淡化)大小的JComponent,将其添加到JPanel,并在动画期间调用较小的组件上的重绘()而不是较大的JPanel

答案 2 :(得分:1)

您可以在绘画前使用setClip()来限制淡入淡出区域。 假设你想要一个小的渐变矩形。使用Area类创建2个Shapes。原始剪辑和淡入淡出矩形和减法的交点(从原始剪辑中减去淡入淡出矩形)。

使用2个不同的剪辑调用super.paintComponent()两次。对于第二个颜料,您可以设置Alpha过滤器。