Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 在javafx画布中淡入淡出一个圆圈_Animation_Canvas_Javafx_Javafx 8_Fade - Fatal编程技术网

Animation 在javafx画布中淡入淡出一个圆圈

Animation 在javafx画布中淡入淡出一个圆圈,animation,canvas,javafx,javafx-8,fade,Animation,Canvas,Javafx,Javafx 8,Fade,我想在javafx画布中淡入淡出一个圆圈。 我可以将一个圆圈从屏幕的一个部分移动到另一个部分,但我似乎无法使这个对象淡入淡出 下面是我用来将圆从屏幕的一部分移动到另一部分的代码 public class AnimatedCircleOnCanvas extends Application { public static final double W = 200; // canvas dimensions. public static final double H = 200;

我想在javafx画布中淡入淡出一个圆圈。 我可以将一个圆圈从屏幕的一个部分移动到另一个部分,但我似乎无法使这个对象淡入淡出

下面是我用来将圆从屏幕的一部分移动到另一部分的代码

public class AnimatedCircleOnCanvas extends Application {
    public static final double W = 200; // canvas dimensions.
    public static final double H = 200;

    public static final double D = 20;  // diameter.

    @Override public void start(Stage stage) {
        DoubleProperty x  = new SimpleDoubleProperty();
        DoubleProperty y  = new SimpleDoubleProperty();

        Timeline timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                    new KeyValue(x, 0),
                    new KeyValue(y, 0)
            ),
            new KeyFrame(Duration.seconds(3),
                    new KeyValue(x, W - D),
                    new KeyValue(y, H - D)
            )
        );
        timeline.setAutoReverse(true);
        timeline.setCycleCount(Timeline.INDEFINITE);

        final Canvas canvas = new Canvas(W, H);
        AnimationTimer timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.setFill(Color.CORNSILK);
                gc.fillRect(0, 0, W, H);
                gc.setFill(Color.FORESTGREEN);
                gc.fillOval(
                    x.doubleValue(),
                    y.doubleValue(),
                    D,
                    D
                );
            }
        };

        stage.setScene(
            new Scene(
                new Group(
                    canvas
                )
            )
        );
        stage.show();

        timer.start();
        timeline.play();
    }

    public static void main(String[] args) { launch(args); }
}  

非常感谢您的帮助

以与设置
x
y
属性动画完全相同的方式,为值范围为1到0的不透明度设置
DoubleProperty
的动画,然后使用根据更改的属性设置颜色:

import javafx.animation.AnimationTimer;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class FadeCircleOnCanvas extends Application {
    public static final double W = 200; // canvas dimensions.
    public static final double H = 200;

    public static final double D = 20;  // diameter.

    @Override public void start(Stage stage) {
        DoubleProperty opacity  = new SimpleDoubleProperty();

        Timeline timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                    new KeyValue(opacity, 1)
            ),
            new KeyFrame(Duration.seconds(3),
                    new KeyValue(opacity, 0)
            )
        );
        timeline.setAutoReverse(true);
        timeline.setCycleCount(Timeline.INDEFINITE);

        final Canvas canvas = new Canvas(W, H);
        AnimationTimer timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.setFill(Color.CORNSILK);
                gc.fillRect(0, 0, W, H);
                gc.setFill(Color.FORESTGREEN.deriveColor(0, 1, 1, opacity.get()));
                gc.fillOval(
                    W/2,
                    H/2,
                    D,
                    D
                );
            }
        };

        stage.setScene(
            new Scene(
                new Group(
                    canvas
                )
            )
        );
        stage.show();

        timer.start();
        timeline.play();
    }

    public static void main(String[] args) { launch(args); }
}  
一般来说,我不喜欢使用画布,而只是使用放置在
窗格中的
形状
实例。然后,您可以直接更改
形状的预定义属性,或者在许多情况下使用特定的预定义动画(例如)

下面是使用此技术的相同示例:

import javafx.animation.FadeTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

    public class FadeCircleOnCanvas extends Application {
        public static final double W = 200; // canvas dimensions.
        public static final double H = 200;

        public static final double D = 20;  // diameter.

        @Override public void start(Stage stage) {

            Circle circle = new Circle(W/2, H/2, D, Color.FORESTGREEN);

            FadeTransition fade = new FadeTransition(Duration.seconds(3), circle);
            fade.setFromValue(1);
            fade.setToValue(0);
            fade.setAutoReverse(true);
            fade.setCycleCount(Timeline.INDEFINITE);

            Pane pane = new Pane(circle);

            stage.setScene(
                new Scene(
                    pane, W, H, Color.CORNSILK
                )
            );
            stage.show();

            fade.play();
        }

        public static void main(String[] args) { launch(args); }
    }  

以与设置
x
y
属性动画完全相同的方式,为值范围为1到0的不透明度设置
double属性动画,然后使用根据更改的属性设置颜色:

import javafx.animation.AnimationTimer;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class FadeCircleOnCanvas extends Application {
    public static final double W = 200; // canvas dimensions.
    public static final double H = 200;

    public static final double D = 20;  // diameter.

    @Override public void start(Stage stage) {
        DoubleProperty opacity  = new SimpleDoubleProperty();

        Timeline timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                    new KeyValue(opacity, 1)
            ),
            new KeyFrame(Duration.seconds(3),
                    new KeyValue(opacity, 0)
            )
        );
        timeline.setAutoReverse(true);
        timeline.setCycleCount(Timeline.INDEFINITE);

        final Canvas canvas = new Canvas(W, H);
        AnimationTimer timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.setFill(Color.CORNSILK);
                gc.fillRect(0, 0, W, H);
                gc.setFill(Color.FORESTGREEN.deriveColor(0, 1, 1, opacity.get()));
                gc.fillOval(
                    W/2,
                    H/2,
                    D,
                    D
                );
            }
        };

        stage.setScene(
            new Scene(
                new Group(
                    canvas
                )
            )
        );
        stage.show();

        timer.start();
        timeline.play();
    }

    public static void main(String[] args) { launch(args); }
}  
一般来说,我不喜欢使用画布,而只是使用放置在
窗格中的
形状
实例。然后,您可以直接更改
形状的预定义属性,或者在许多情况下使用特定的预定义动画(例如)

下面是使用此技术的相同示例:

import javafx.animation.FadeTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

    public class FadeCircleOnCanvas extends Application {
        public static final double W = 200; // canvas dimensions.
        public static final double H = 200;

        public static final double D = 20;  // diameter.

        @Override public void start(Stage stage) {

            Circle circle = new Circle(W/2, H/2, D, Color.FORESTGREEN);

            FadeTransition fade = new FadeTransition(Duration.seconds(3), circle);
            fade.setFromValue(1);
            fade.setToValue(0);
            fade.setAutoReverse(true);
            fade.setCycleCount(Timeline.INDEFINITE);

            Pane pane = new Pane(circle);

            stage.setScene(
                new Scene(
                    pane, W, H, Color.CORNSILK
                )
            );
            stage.show();

            fade.play();
        }

        public static void main(String[] args) { launch(args); }
    }  

以与设置
x
y
属性动画完全相同的方式,为值范围为1到0的不透明度设置
double属性动画,然后使用根据更改的属性设置颜色:

import javafx.animation.AnimationTimer;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class FadeCircleOnCanvas extends Application {
    public static final double W = 200; // canvas dimensions.
    public static final double H = 200;

    public static final double D = 20;  // diameter.

    @Override public void start(Stage stage) {
        DoubleProperty opacity  = new SimpleDoubleProperty();

        Timeline timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                    new KeyValue(opacity, 1)
            ),
            new KeyFrame(Duration.seconds(3),
                    new KeyValue(opacity, 0)
            )
        );
        timeline.setAutoReverse(true);
        timeline.setCycleCount(Timeline.INDEFINITE);

        final Canvas canvas = new Canvas(W, H);
        AnimationTimer timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.setFill(Color.CORNSILK);
                gc.fillRect(0, 0, W, H);
                gc.setFill(Color.FORESTGREEN.deriveColor(0, 1, 1, opacity.get()));
                gc.fillOval(
                    W/2,
                    H/2,
                    D,
                    D
                );
            }
        };

        stage.setScene(
            new Scene(
                new Group(
                    canvas
                )
            )
        );
        stage.show();

        timer.start();
        timeline.play();
    }

    public static void main(String[] args) { launch(args); }
}  
一般来说,我不喜欢使用画布,而只是使用放置在
窗格中的
形状
实例。然后,您可以直接更改
形状的预定义属性,或者在许多情况下使用特定的预定义动画(例如)

下面是使用此技术的相同示例:

import javafx.animation.FadeTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

    public class FadeCircleOnCanvas extends Application {
        public static final double W = 200; // canvas dimensions.
        public static final double H = 200;

        public static final double D = 20;  // diameter.

        @Override public void start(Stage stage) {

            Circle circle = new Circle(W/2, H/2, D, Color.FORESTGREEN);

            FadeTransition fade = new FadeTransition(Duration.seconds(3), circle);
            fade.setFromValue(1);
            fade.setToValue(0);
            fade.setAutoReverse(true);
            fade.setCycleCount(Timeline.INDEFINITE);

            Pane pane = new Pane(circle);

            stage.setScene(
                new Scene(
                    pane, W, H, Color.CORNSILK
                )
            );
            stage.show();

            fade.play();
        }

        public static void main(String[] args) { launch(args); }
    }  

以与设置
x
y
属性动画完全相同的方式,为值范围为1到0的不透明度设置
double属性动画,然后使用根据更改的属性设置颜色:

import javafx.animation.AnimationTimer;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class FadeCircleOnCanvas extends Application {
    public static final double W = 200; // canvas dimensions.
    public static final double H = 200;

    public static final double D = 20;  // diameter.

    @Override public void start(Stage stage) {
        DoubleProperty opacity  = new SimpleDoubleProperty();

        Timeline timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                    new KeyValue(opacity, 1)
            ),
            new KeyFrame(Duration.seconds(3),
                    new KeyValue(opacity, 0)
            )
        );
        timeline.setAutoReverse(true);
        timeline.setCycleCount(Timeline.INDEFINITE);

        final Canvas canvas = new Canvas(W, H);
        AnimationTimer timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.setFill(Color.CORNSILK);
                gc.fillRect(0, 0, W, H);
                gc.setFill(Color.FORESTGREEN.deriveColor(0, 1, 1, opacity.get()));
                gc.fillOval(
                    W/2,
                    H/2,
                    D,
                    D
                );
            }
        };

        stage.setScene(
            new Scene(
                new Group(
                    canvas
                )
            )
        );
        stage.show();

        timer.start();
        timeline.play();
    }

    public static void main(String[] args) { launch(args); }
}  
一般来说,我不喜欢使用画布,而只是使用放置在
窗格中的
形状
实例。然后,您可以直接更改
形状的预定义属性,或者在许多情况下使用特定的预定义动画(例如)

下面是使用此技术的相同示例:

import javafx.animation.FadeTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

    public class FadeCircleOnCanvas extends Application {
        public static final double W = 200; // canvas dimensions.
        public static final double H = 200;

        public static final double D = 20;  // diameter.

        @Override public void start(Stage stage) {

            Circle circle = new Circle(W/2, H/2, D, Color.FORESTGREEN);

            FadeTransition fade = new FadeTransition(Duration.seconds(3), circle);
            fade.setFromValue(1);
            fade.setToValue(0);
            fade.setAutoReverse(true);
            fade.setCycleCount(Timeline.INDEFINITE);

            Pane pane = new Pane(circle);

            stage.setScene(
                new Scene(
                    pane, W, H, Color.CORNSILK
                )
            );
            stage.show();

            fade.play();
        }

        public static void main(String[] args) { launch(args); }
    }  

原始代码源:。原始代码源:。原始代码源:。原始代码源:。谢谢。但我想知道,你怎么能修改这个方法,使一个圆在一秒钟内淡入,然后另一个圆在一秒钟后淡入。或者说,用一个窗格来实现这一点更容易。用一个窗格来实现这一点更容易。但这两种方法都很容易适应。我也希望能够一次一个地淡入一个对象。例如,使用For循环在每个节点之间循环,并在窗格中淡入,在下一个节点淡入之前等待一两秒钟。然后编写代码以执行此操作,StackOverflow不是编码服务。考虑适应杰姆斯的窗格/节点为基础的解决方案和使用。如果在尝试编写代码后遇到问题,您可以随时提出新问题。谢谢。但我想知道,你怎么能修改这个方法,使一个圆在一秒钟内淡入,然后另一个圆在一秒钟后淡入。或者说,用一个窗格来实现这一点更容易。用一个窗格来实现这一点更容易。但这两种方法都很容易适应。我也希望能够一次一个地淡入一个对象。例如,使用For循环在每个节点之间循环,并在窗格中淡入,在下一个节点淡入之前等待一两秒钟。然后编写代码以执行此操作,StackOverflow不是编码服务。考虑适应杰姆斯的窗格/节点为基础的解决方案和使用。如果在尝试编写代码后遇到问题,您可以随时提出新问题。谢谢。但我想知道,你怎么能修改这个方法,使一个圆在一秒钟内淡入,然后另一个圆在一秒钟后淡入。或者说,用一个窗格来实现这一点更容易。用一个窗格来实现这一点更容易。但这两种方法都很容易适应。我也希望能够一次一个地淡入一个对象。例如,使用For循环在每个节点之间循环,并在窗格中淡入,在下一个节点淡入之前等待一两秒钟。然后编写代码以执行此操作,StackOverflow不是编码服务。考虑适应杰姆斯的窗格/节点为基础的解决方案和使用。如果在尝试编写代码后遇到问题,您可以随时提出新问题。谢谢。但我想知道,你怎么能修改这个方法,使一个圆在一秒钟内淡入,然后另一个圆在一秒钟后淡入。或者说,用一个窗格来实现这一点更容易。用一个窗格来实现这一点更容易。但这两种方法都很容易适应。我也希望能够一次一个地淡入一个对象。例如,使用For循环在每个节点之间循环,并在窗格中淡入,在下一个节点淡入之前等待一两秒钟。然后编写代码以执行此操作,StackOverflow不是编码服务。考虑适应杰姆斯的窗格/节点为基础的解决方案和使用。如果在尝试编写代码后遇到问题,您总是可以提出新问题。