seticon redimensionar icon java swing animation fade

java - redimensionar - ¿Cómo me desvanezco una imagen en el swing?



seticon java (3)

Aquí hay información útil que describe la transparencia de la imagen.

Su enfoque sería algo como esto:

  • Defina un Timer oscilación para ActionEvent un ActionEvent de ActionEvent en el hilo de envío de evento cada N milisegundos.
  • Agregue un ActionListener al Timer que debe llamar a repaint() en su Component contiene la Image .
  • Reemplace el método paintComponent(Graphics) del Component para hacer lo siguiente:
    • Emitir el objeto Graphics a un Graphics2D .
    • Establezca un AlphaComposite en Graphics2D usando setComposite . Esto controla el nivel de transparencia.
    • Dibuja la imagen.

Para cada iteración de su animación de fundido de salida, cambiaría los valores de AlphaComposite para que la imagen sea más transparente.

Tengo clase que hereda de JPanel con una imagen y quiero configurar una pequeña animación para mostrar el panel / imagen y luego fundirla cuando se dispara un evento.

Presumiblemente configuré un hilo y desencadené la animación, pero ¿cómo hago el desvanecimiento?


Aquí hay un ejemplo usando transparencia alfa. Puede usar esta herramienta compuesta para ver el resultado del uso de diferentes colores, modos y alfas.

import java.awt.*; import java.awt.event.*; import java.awt.event.ActionListener; import javax.swing.*; public class AlphaTest extends JPanel implements ActionListener { private static final Font FONT = new Font("Serif", Font.PLAIN, 32); private static final String STRING = "Mothra alert!"; private static final float DELTA = -0.1f; private static final Timer timer = new Timer(100, null); private float alpha = 1f; AlphaTest() { this.setPreferredSize(new Dimension(256, 96)); this.setOpaque(true); this.setBackground(Color.black); timer.setInitialDelay(1000); timer.addActionListener(this); timer.start(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setFont(FONT); int xx = this.getWidth(); int yy = this.getHeight(); int w2 = g.getFontMetrics().stringWidth(STRING) / 2; int h2 = g.getFontMetrics().getDescent(); g2d.fillRect(0, 0, xx, yy); g2d.setComposite(AlphaComposite.getInstance( AlphaComposite.SRC_IN, alpha)); g2d.setPaint(Color.red); g2d.drawString(STRING, xx / 2 - w2, yy / 2 + h2); } @Override public void actionPerformed(ActionEvent e) { alpha += DELTA; if (alpha < 0) { alpha = 1; timer.restart(); } repaint(); } static public void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame f = new JFrame(); f.setLayout(new GridLayout(0, 1)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new AlphaTest()); f.add(new AlphaTest()); f.add(new AlphaTest()); f.pack(); f.setVisible(true); } }); } }


Puede hacer el enhebrado usted mismo, pero podría ser más fácil usar la biblioteca Trident para manejarlo. Si crea un setter en su clase llamado (digamos, setOpacity ), puede pedirle a Trident que interpole el campo "opacidad" de 1.0 a 0.0 durante un período de tiempo específico (aquí hay algunos de los documentos sobre cómo usar Trident).

Cuando está pintando la imagen, puede hacer la transparencia con un AlphaComposite , utilizando el valor de "opacidad" actualizado para el parámetro alfa del compuesto. Hay un tutorial de Sun que incluye un ejemplo alfa compuesto .