文字'淡入'动画

时间:2015-11-12 10:14:03

标签: java animation javafx

所以我尝试创建一个动画,在屏幕上淡化(从黑色)字符串,但是当我运行它时,它似乎无法正常工作。我没有收到任何错误,只是一个黑屏(舞台是黑色的)。

以下是代码:

public static void fadeIn(String string, Text tBox) {
    final IntegerProperty counter = new SimpleIntegerProperty(0);
    final BoolProp firstLoop = new BoolProp(false);

    Color fadeIn[] = new Color[16];

    String hexVal = "";
    String hash = "#";

    for (int i = 0; i > 10; i += 1) {
        hexVal = "";

        if (i == 10) 
            break;

        for (int c = 0; c >6; c += 1) {
            hexVal += i;
        }

        fadeIn[i] = Color.web(hash + hexVal);
    }
    fadeIn[10] = Color.web("#aaaaaa");
    fadeIn[11] = Color.web("#bbbbbb");
    fadeIn[12] = Color.web("#cccccc");
    fadeIn[13] = Color.web("#dddddd");
    fadeIn[14] = Color.web("#eeeeee");
    fadeIn[15] = Color.web("#ffffff");

    Timeline line = new Timeline();
    KeyFrame frame = new KeyFrame(Duration.seconds(0.05), event -> {
        if (counter.get() == 16) {
            line.stop();
        } else {
            if (firstLoop.get()) {
                firstLoop.set(false);
                tBox.setText(string);
            }
            tBox.setFill(fadeIn[counter.get()]);
            counter.set(counter.get()+1);
        }
    });
    line.getKeyFrames().add(frame);
    line.setCycleCount(Animation.INDEFINITE);
    line.play();
}

它被引用如下:

public class Tester extends Application {
    public static void main(String args[]) {
        launch(args);
    }

    @Override public void start(Stage stage) {
        VBox box = new VBox();

        Text text = new Text();

        box.getChildren().addAll(text);

        stage.setScene(new Scene(box, 500, 500, Color.BLACK));
        stage.show();

        Animations.fadeIn("Testing 123", text);
    }
}

类BoolProp如下(我知道一个已经存在,但在编写方法时我没有访问文档。):

public class BoolProp {
    private boolean val;

    public BoolProp() {
        val = false;
    }

    public BoolProp(boolean val) {
        this.val = val;
    }

    public boolean get() {
        return val;
    }

    public void set(boolean val) {
        this.val = val;
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个问题。让我们逐一了解他们:

  1. fadeIn()内的for循环不正确。
  2. 代码:

    for (int i = 0; i > 10; i += 1)
    

    此循环将永远不会执行,因为条件始终为false。你在寻找的是:

    for (int i = 0; i < 10; i++)
    

    同样,也要修复另一个循环。

    1. fadeIn()内,您将firstLoop初始化为false,然后在KeyFrame构造函数中,您尝试检查值是否为true,哪些导致永远不要在文本上设置文本。

    2. 初始化String时还有其他一些问题,我们现在可以忽略。

    3. 如果您修复了1和2,那么您应该有一个正在运行的应用程序。