Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

Como fazer fade (aparecer/desaparecer) de um componente

Propósito. Fazer um componente surgir suavemente (0 → 1) ou desaparecer (1 → 0). AlphaAnimation interpola um float com ease-in-out; você aplica esse valor à opacidade do componente e força o repaint.

APIs usadas

  • new AlphaAnimation(float start, float end, float duration [, float fps]) — cria a animação. start/end são clampados a [0,1]; interpolação ease-in-out cubic; duration em segundos; fps opcional (default 60).
  • AlphaAnimation.onUpdate(Runnable) — callback a cada frame; leia getValue() aqui.
  • AlphaAnimation.onComplete(Runnable) — callback ao chegar em end (também disparado por stop()).
  • AlphaAnimation.getValue() — valor atual interpolado.
  • AlphaAnimation.start() / stop() / cancel() — inicia / para (dispara onComplete) / cancela (não dispara).
  • Component.alpha(float) — define a opacidade do componente (0–1, clampada). Divergência de Javadoc: o doc cita setAlpha, mas o método real é alpha(...).
  • Component.repaint() — método estático; solicita re-render (o CrossFly renderiza sob demanda, então é obrigatório chamar dentro do onUpdate).

Exemplo completo (copiar, colar e rodar)

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.animation.*;

/** Tela principal executável: aplica fade-in num Label ao abrir. */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label c = new Label("Olá");
      add(c);

      // Declare a variável antes para poder ler getValue() dentro do onUpdate.
      AlphaAnimation anim = new AlphaAnimation(0f, 1f, 0.3f);       // 300 ms, 0 → 1
      anim.onUpdate(() ->
         {
            c.alpha(anim.getValue());   // aplica opacidade
            Component.repaint();        // render sob demanda: sem isto, o frame não é redesenhado
         })
         .onComplete(() -> Component.repaint())
         .start();
   }
}

O trecho abaixo mostra só o miolo. Para rodar, coloque-o no esqueleto MainWindow acima.

Trecho mínimo

// verificado na fonte: AlphaAnimation clamp [0,1] ease-in-out; Component.alpha(float); Component.repaint() estático
Label c = new Label("Olá");
add(c);

// Declare a variável antes para poder ler getValue() dentro do onUpdate.
AlphaAnimation anim = new AlphaAnimation(0f, 1f, 0.3f);       // 300 ms, 0 → 1
anim.onUpdate(() ->
   {
      c.alpha(anim.getValue());   // aplica opacidade
      Component.repaint();        // render sob demanda: sem isto, o frame não é redesenhado
   })
   .onComplete(() -> Component.repaint())
   .start();

Notas:

  • alpha(1f) (ou >= 0.999) remove a propriedade de opacidade (componente 100% opaco); alpha(0f) o torna invisível mas ainda presente no layout.
  • Para fade-out use new AlphaAnimation(1f, 0f, 0.3f) e, no onComplete, hide()/remova o componente se quiser.
  • Sempre chame Component.repaint() no onUpdate — o CrossFly só redesenha quando solicitado.

Aprofunde-se

Esta página foi útil?