【发布时间】:2013-12-19 05:52:59
【问题描述】:
我正在尝试学习如何将图像淡入和淡出到另一个图像或另一个图像。因此,如果我有 2 张图像,并且目前正在显示 1 张,我想在背景中显示另一张图像并将第一张图像淡入第二张图像。或者,我想将焦点放在新图像上并慢慢淡入第一张图像,然后停止显示第一张。
我不确定如何:
设置焦点,如果需要的话。
如果我将 alpha 更改为 0 并递增并且只绘制一个图像,我可以淡入,但是我无法使用此代码的任何变体使其淡出。 (即注释掉一个要绘制的图像)。
编辑:真的,我担心的是能够拥有 2 张图像并使当前显示的图像慢慢消失到第 2 张图像中。如何完成并不需要与此有关。
这是我正在弄乱的代码示例:
import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class FadeIn extends JPanel implements ActionListener {
private Image imagem;
private Image image2;
private Timer timer;
private float alpha = 1f;
public FadeIn() {
imagem = (new ImageIcon(getClass().getResource(
"/resources/1stImage.jpg"))).getImage();
image2 = (new ImageIcon(getClass().getResource(
"/resources/2ndImage.jpg"))).getImage();
timer = new Timer(20, this);
timer.start();
}
// here you define alpha 0f to 1f
public FadeIn(float alpha) {
imagem = (new ImageIcon(getClass().getResource(
"/resources/1stImage.jpg"))).getImage();
this.alpha = alpha;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(imagem, 0, 0, 400, 300, null);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
alpha));
g2d.drawImage(image2, 0, 0, 400, 300, null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Fade out");
frame.add(new FadeIn());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(420, 330);
// frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
alpha += -0.01f;
if (alpha <= 0) {
alpha = 0;
timer.stop();
}
repaint();
}
}
【问题讨论】:
-
“setFocus”是什么意思?
-
基本上在背景中绘制一张图像,在其前面绘制另一张图像。然后使用计时器淡出顶部图像。而不是白色背景,它将是底部图像。如果我只是在屏幕上填充一个矩形,我已经能够做到这一点,但我无法在背景中设置图像。
标签: java image swing animation transparency