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/endsão clampados a [0,1]; interpolação ease-in-out cubic;durationem segundos;fpsopcional (default 60).AlphaAnimation.onUpdate(Runnable)— callback a cada frame; leiagetValue()aqui.AlphaAnimation.onComplete(Runnable)— callback ao chegar emend(também disparado porstop()).AlphaAnimation.getValue()— valor atual interpolado.AlphaAnimation.start()/stop()/cancel()— inicia / para (disparaonComplete) / cancela (não dispara).Component.alpha(float)— define a opacidade do componente (0–1, clampada). Divergência de Javadoc: o doc citasetAlpha, 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 doonUpdate).
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
MainWindowacima.
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, noonComplete,hide()/remova o componente se quiser. - Sempre chame
Component.repaint()noonUpdate— o CrossFly só redesenha quando solicitado.
Aprofunde-se
- Animações de valor
- Receita irmã: Pulso em loop · Mover um componente
- Relacionado: Abrir e fechar uma tela
Esta página foi útil?Obrigado pelo feedback!