我试图在javafx中一次淡入一个对象。我试图使用for循环来遍历组的节点,但是组中的所有节点似乎同时显示而不是一次淡入。我似乎无法弄清楚问题出在哪里。
Group points = new Group();
for(int i = 0; i < ipSize; i++){
double xCentre = ipXPoints[i]-5;
double yCentre = ipYPoints[i]-5;
Circle point = new Circle(xCentre , yCentre, 10, Color.FORESTGREEN);
points.getChildren().add(point);
}
pane.getChildren().add(points);
Timeline timeline = new Timeline();
for(Node node: pane.getChildren()){
timeline.getKeyFrames().addAll(
new KeyFrame(Duration.seconds(0), // set start position at 0
new KeyValue(node.opacityProperty(), 0, Interpolator.EASE_BOTH)
),
new KeyFrame(Duration.seconds(3),
new KeyValue(node.opacityProperty(), 1, Interpolator.EASE_BOTH)
)
);
timeline.play();
}
编辑: 我也试过这个,但它一直在播放所有节点,而不是一次播放所有节点。
FadeTransition fade = new FadeTransition(Duration.seconds(3), node);
fade.setFromValue(0);
fade.setToValue(1);
fade.setAutoReverse(false);
fade.setCycleCount(1);
fade.setInterpolator(Interpolator.EASE_BOTH);
fade.play();
感谢您的帮助:)
答案 0 :(得分:1)
同时显示所有圈子的原因是KeyFrame
持续时间实际上不是帧的持续时间,而是从动画开始的绝对持续时间。因此,您指定所有转换发生在0和3之间。要修复你的代码,你需要将第一对KeyFrame持续时间设置为0s和3s,第二对设置为3s和6s,第三对设置为6s和9s等等。
或者,您可以SequentialTransition
使用FadeTransitions
:
import java.util.Random;
import javafx.animation.FadeTransition;
import javafx.animation.SequentialTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class SequentialFadeIn extends Application {
@Override
public void start(Stage stage) {
int width = 600;
int height = 400;
Group points = new Group();
SequentialTransition seq = new SequentialTransition();
Random random = new Random();
for(int i = 0; i < 10; i++){
double xCentre = random.nextInt(width);
double yCentre = random.nextInt(height);
Circle point = new Circle(xCentre , yCentre, 10, Color.FORESTGREEN);
point.setOpacity(0.0);
points.getChildren().add(point);
FadeTransition fade = new FadeTransition(Duration.seconds(3), point);
fade.setToValue(1.0);
seq.getChildren().add(fade);
}
stage.setScene(new Scene(points, width, height));
stage.show();
seq.play();
}
public static void main(String[] args) {
launch(args);
}
}