渐变之间平滑渐变

时间:2013-01-09 17:36:01

标签: java javafx-2 javafx

以下代码应在两个渐变之间平滑地淡化矩形:

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秒后突然切换(或者无论时间线的持续时间是什么。)

使用渐变而不是简单的颜色时,如何逐渐淡出?是否有一些逻辑我不知道为什么这不是以我正在思考的方式工作,或者它是一个错误?

在任何一种情况下,实现这种效果的最佳解决方法是什么?

1 个答案:

答案 0 :(得分:1)

我不认为它会知道如何在根本不同的涂料之间平滑过渡。尝试将纯色设置为渐变,其中开始颜色和结束颜色都是相同的颜色。