Porém eu gostaria de fazer com que antes de remover do desktop a notificação fizesse aquela animação de “ir para a esquerda” como no Android por exemplo. Alguém sabe se isso seria possível?
Olá Amigo
Tem Um Cana no youtube chamado Genuine Coder, ele fala tudo sobre isso
Da uma olhada la o link é: https://www.youtube.com/channel/UCCXbhmjID-T2I0KfuDPbi6A
Se ele não tiver um video ensinando direto como você faz, com outros videos você vai pegar uma base, como a tela de notificações que ele fez, é bem legal!
Nunca pensei que fosse tão simples, eu implementei, aparentemente está funcionando, porém está MUITO rápido. Eu já alterei todas as propriedades de mile segundos que eu vi na classe mas continua rápido, mas rápido que não dá nem pra perceber a animação.
Mas mesmo alterando o Duration eu não consigo ver a diferença. Agora eu percebi que eu estava utilizando o exemplo do FadeInleftTransition ao invés de FadeOutLeftTransition, porém dá na mesma depois de mudar.
Estou implementando assim:
bt.setOnAction((ActionEvent) ->{
new FadeOutLeftTransition(h).play();
desktop.getChildren().remove(h);
});
A classe:
import com.gluonhq.charm.glisten.animation.CachedTimelineTransition;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.scene.Node;
import javafx.util.Duration;
/**
* Animate a fade out left effect on a node
*
* Port of FadeOutLeft from Animate.css http://daneden.me/animate by Dan Eden
*
* {@literal @}keyframes fadeOutLeft {
* 0% {
* opacity: 0;
* transform: translateX(0);
* }
* 100% {
* opacity: 1;
* transform: translateX(-20px);
* }
* }
*
* @author Jasper Potts
*/
public class FadeOutLeftTransition extends CachedTimelineTransition {
/**
* Create new FadeOutLeftTransition
*
* @param node The node to affect
*/
public FadeOutLeftTransition(final Node node) {
super(
node,
new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(node.opacityProperty(), 1, WEB_EASE),
new KeyValue(node.translateXProperty(), 0, WEB_EASE)
),
new KeyFrame(Duration.millis(1000),
new KeyValue(node.opacityProperty(), 0, WEB_EASE),
new KeyValue(node.translateXProperty(), -20, WEB_EASE)
)
));
setCycleDuration(Duration.seconds(3));
setDelay(Duration.seconds(0.2));
}
@Override protected void stopping() {
super.stopping();
node.setTranslateX(0); // restore default
}
}
A animação é executada em background, quando vc remove o node do pane a animação continua rodando mas vc não vê. Faça o seguinte:
Adicione uma ação para quando a animação terminar com setOnFinished, essa ação deve ser remover o componente. Isso resolve.