【问题标题】:Two Node Fade In and Fade Out every minute每分钟两个节点淡入淡出
【发布时间】:2017-11-26 23:02:36
【问题描述】:

我正在尝试使用 fade-infade-out 动画为两个窗格设置动画。它应该为第一个窗格设置动画,几秒钟后,它应该淡出并为第二个窗格设置动画,依此类推。

我试过这段代码:

Thread thread;

@Override
public void run() {
   changingPane();
}

public void changingPane() {
    thread = new Thread() {
        @Override
        public void run() {
            for (;;) {
                if(mainController.getOpenPane()==0)
                {
                    mainController.nextPane();
                }
                else{
                    mainController.prevPane();
                }
            }
        }

    };
    thread.start();
}

【问题讨论】:

  • 不要为此使用线程。使用Animation API
  • 我该怎么做?你有那个样品吗?
  • tutorial 有大量样本。如果您无法解决问题,请尝试并发布具体问题。

标签: java animation javafx javafx-8


【解决方案1】:

假设您有两个窗格,

private Pane FIRST_PANE = new Pane();
private Pane SECOND_PANE = new Pane();

并添加这些方法来淡入和淡出窗格,

淡入方法

private void fadeInPane(Pane pane) {
     FadeTransition fadeIn = new FadeTransition(Duration.millis(2900), pane);
     fadeIn.setFromValue(0);
     fadeIn.setToValue(1);
     fadeIn.setOnFinished(e -> fadeOutPane(pane));
     fadeIn.play();
}

淡出方法

private void fadeOutPane(Pane pane) {
     FadeTransition fadeOut = new FadeTransition(Duration.millis(1900), pane);
     fadeOut.setFromValue(1);
     fadeOut.setToValue(0);
     fadeOut.play();
}

然后根据您的逻辑和需要调用这些方法,

private void animatePane() {
    boolean first_active = true;

    Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {            

        if(first_active){
            fadeInPane(FIRST_PANE);
            first_active = false;
        }else{
            first_active = true;
            fadeInPane(SECOND_PANE);
        }
    }),
         new KeyFrame(Duration.seconds(30))
    );
    clock.setCycleCount(Animation.INDEFINITE);
    clock.play();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多