Fade in and Fade out
Hi,
I want to create an image animation.
Any idea how can I create fade in and fade out effect?
Hi,
I want to create an image animation.
Any idea how can I create fade in and fade out effect?
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class ImageFader extends JPanel implements Runnable {
BufferedImage top;
BufferedImage bottom;
float alpha = 1f;
public ImageFader() {
createImages();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
int rule = AlphaComposite.SRC_OVER;
AlphaComposite ac = AlphaComposite.getInstance(rule, alpha);
g2.setComposite(ac);
g2.drawImage(bottom, 0, 0, this);
ac = AlphaComposite.getInstance(rule, 1.0f - alpha);
g2.setComposite(ac);
g2.drawImage(top, 0, 0, this);
}
public Dimension getPreferredSize() {
return new Dimension(240, 200);
}
public void run() {
boolean increasing = false;
float alphaInc = 0.01f;
boolean running = true;
while(running) {
try {
Thread.sleep(40);
} catch(InterruptedException e) {
running = false;
break;
}
if(increasing) {
if(alpha + alphaInc > 1.0f)
increasing = false;
else
alpha += alphaInc;
}
if(!increasing) {
if(alpha - alphaInc < 0)
increasing = true;
else
alpha -= alphaInc;
}
repaint();
}
}
private void createImages() {
Dimension d = getPreferredSize();
int w = d.width;
int h = d.height;
int type = BufferedImage.TYPE_INT_RGB;
top = new BufferedImage(w, h, type);
Graphics2D g2 = top.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setBackground(Color.blue);
g2.clearRect(0,0,w,h);
g2.setPaint(Color.orange);
g2.fill(new Ellipse2D.Double(w/16, h/16, w*7/8, h*7/8));
g2.dispose();
bottom = new BufferedImage(w, h, type);
g2 = bottom.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setBackground(Color.red);
g2.clearRect(0,0,w,h);
g2.setPaint(Color.green.darker());
g2.fill(new Rectangle2D.Double(w/12, h/12, w*5/6, h*5/6));
g2.dispose();
}
private void start() {
Thread thread = new Thread(this);
thread.setPriority(Thread.NORM_PRIORITY);
thread.start();
}
public static void main(String[] args) {
ImageFader test = new ImageFader();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(test);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
test.start();
}
}
Thanx a lot crwood.