JavaFX Marquee动画

时间:2016-09-03 04:49:25

标签: java animation javafx

您可能已经看过一些应用,当标签中的TestGrainFactory无法完全显示时,它会被设置为动画并且会返回和返回,这样用户就可以看到该标签包含的字符串.Android当手机显示不足以显示整个标签时,这就是设置。

以下是使用StringJavaFX中实现此功能的代码,但这不是一个好方法。

问题是: 以下是我如何使用动画或JavaFX类中的其他构建来完成它?

代码:

Service

1 个答案:

答案 0 :(得分:2)

您可以使用echo json_encode(array('result' => $imagePath));

Timeline

请注意,由于// min distance to Pane bounds private static final double OFFSET = 25; @Override public void start(Stage primaryStage) { Text text = new Text("A reallyyy big teeeeexxxxxxxxxxxxxxxxxxxxxxxt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); text.setLayoutY(25); text.setManaged(false); text.setLayoutX(OFFSET); Pane pane = new Pane(text); pane.setMinHeight(50); Timeline timeline = new Timeline(); KeyFrame updateFrame = new KeyFrame(Duration.seconds(1 / 60d), new EventHandler<ActionEvent>() { private boolean rightMovement; @Override public void handle(ActionEvent event) { double tW = text.getLayoutBounds().getWidth(); double pW = pane.getWidth(); double layoutX = text.getLayoutX(); if (2 * OFFSET + tW <= pW && layoutX >= OFFSET) { // stop, if the pane is large enough and the position is correct text.setLayoutX(OFFSET); timeline.stop(); } else { if ((rightMovement && layoutX >= OFFSET) || (!rightMovement && layoutX + tW + OFFSET <= pW)) { // invert movement, if bounds are reached rightMovement = !rightMovement; } // update position if (rightMovement) { layoutX += 1; } else { layoutX -= 1; } text.setLayoutX(layoutX); } } }); timeline.getKeyFrames().add(updateFrame); timeline.setCycleCount(Animation.INDEFINITE); // listen to bound changes of the elements to start/stop the animation InvalidationListener listener = o -> { double textWidth = text.getLayoutBounds().getWidth(); double paneWidth = pane.getWidth(); if (textWidth + 2 * OFFSET > paneWidth && timeline.getStatus() != Animation.Status.RUNNING) { timeline.play(); } }; text.layoutBoundsProperty().addListener(listener); pane.widthProperty().addListener(listener); Scene scene = new Scene(pane); primaryStage.setScene(scene); primaryStage.show(); } 在运行时无法调整,因此需要自行重新更新位置,因此要在动画期间调整大小,您需要重复更新...