下面的代码应该在两个渐变之间平滑地淡化一个矩形:
public class FXTest extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Rectangle rect = new Rectangle(200, 100, new LinearGradient(0, 0, 1, 1, true, CycleMethod.REPEAT, new Stop(0, Color.BLACK), new Stop(1, Color.RED)));
root.getChildren().add(rect);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
getFillTimeline(rect, new LinearGradient(0, 0, 1, 1, true, CycleMethod.REPEAT, new Stop(0, Color.RED), new Stop(1, Color.BLACK))).play();
}
private Timeline getFillTimeline(Shape node, Paint newPaint) {
Timeline t = new Timeline();
t.getKeyFrames().add(new KeyFrame(Duration.ZERO, new KeyValue(node.fillProperty(), node.getFill())));
t.getKeyFrames().add(new KeyFrame(Duration.seconds(3), new KeyValue(node.fillProperty(), newPaint)));
return t;
}
}
如果我在上面的例子中指定了纯色,那么褪色就没有问题了,很好很流畅。但是,如果我使用渐变(如上面的代码),那么不会发生淡入淡出,渐变会在 3 秒后突然切换(或者无论时间线的持续时间是多少。)
当使用渐变而不是简单的颜色时,如何实现渐变?为什么这不应该按照我的想法工作,或者它是一个错误,我背后是否缺少一些逻辑?
无论哪种情况,实现此效果的最佳解决方法是什么?