Java:带透明窗口的动画 GIF

标签 java animation transparency animated-gif awtutilities

我正在尝试使用简单的 JLabel 在透明的 JDialog 上显示动画 gif:

JDialog dialog = new JDialog();
AWTUtilities.setWindowOpaque(dialog,false);

JLabel label = new JLabel();
ImageIcon ii = new ImageIcon("animation.gif");
label.setIcon(ii);

JPanel panel = new JPanel();
panel.setBackground(new Color(0,0,0,0));
panel.add(label);
dialog.add(panel);

dialog.setVisible(true);

这几乎行得通。它可以流畅地显示动画并且确实具有透明度。 问题是所有的动画帧都被覆盖了,而不是在每个帧步骤都得到一个清晰的 Canvas 和当前帧。 我假设 JLabel 的 Canvas 不会在每个重绘步骤中都被清除。 有谁知道我该如何解决这个问题?

编辑: 我想出了一个解决办法。 我不得不覆盖 ImageIcon 的 paintIcon 函数并手动清除 Canvas :

class ClearImageIcon extends ImageIcon{
    public ClearImageIcon(String filename){super(filename);}

    @Override
    public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
        Graphics2D g2 = (Graphics2D)g.create();
        g2.setBackground(new Color(0,0,0,0));
        g2.clearRect(0, 0, getIconWidth(), getIconHeight());
        super.paintIcon(c, g2, x, y);
    }
}

这会将每一帧都很好地绘制到屏幕上。

最佳答案

关于Java:带透明窗口的动画 GIF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5922749/

相关文章:

delphi - 如何在表单上放置半透明层

java - Android Studio 请求应用程序权限无法编译显示错误 : array dimension missing

java - 从 eclipse 导出为 war 并添加其他文件

java - java中的用户模拟

javascript - 在 jQuery 中进行宽度转换

python - PyGTK:CellRendererPixbuf 和透明度

java - 调整大小时 Jframe 闪烁的原因是什么?

html - 我添加了一个 CSS 动画,但它不起作用,但一切看起来都很好

javascript - Three.js动画变色控件

.net - .NET 中用户控制的透明 Web 浏览器