Javafx - 嵌入式设备

时间:2017-03-06 04:58:32

标签: java javafx embedded javafx-8 transition

我们目前正在开发一个JavaFX项目,我们需要实现Text动画,例如从左到右以不同的速度移动。应用程序的执行环境是嵌入式设备 - Stick PC。

我们使用了Translate Transition API https://docs.oracle.com/javase/8/javafx/api/javafx/animation/TranslateTransition.html来实现动画效果,但我们正面临着平滑性问题。与笔记本电脑/桌面中的动画

相比,文字随着抽搐移动并且移动速度较慢
package application;

import javafx.animation.Interpolator;
import javafx.animation.Timeline;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.CacheHint;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;

public class SampleAnimationTest extends Application {

    // private final Logger logger = Logger.getLogger("genLog");

    @Override
    public void start(Stage primaryStage) throws Exception {
         StackPane group = new StackPane();
         Rectangle rectangle = new Rectangle();
         rectangle.setHeight(1080);
         rectangle.setWidth(1920);
         rectangle.setFill(Color.WHITE);
         rectangle.setTranslateX(0);
         rectangle.setTranslateY(0);
         rectangle.setCache(true);
         rectangle.setCacheHint(CacheHint.SPEED);
         Text text = new Text("THIS IS A LONG TEXT FOR TESTING TEXT ANIMATION IN JAVAFX");
         text.setFill(Color.BLACK);
         text.setUnderline(false);
         text.setFont(Font.font("Meiryo", 509.3899));
         text.setTextAlignment(TextAlignment.CENTER);
         text.setCache(true);
         text.setCacheHint(CacheHint.SPEED);
         TranslateTransition tt = new TranslateTransition();
         tt.setNode(text);
         Rectangle rClip = new Rectangle();
         rClip.setWidth(rectangle.getWidth());
         rClip.setHeight(rectangle.getHeight());        
         rClip.translateXProperty().bind(rectangle.translateXProperty());
         group.getChildren().add(rectangle);
         group.getChildren().add(text);
         group.setClip(rClip);
         Group group2 = new Group();
         group2.getChildren().add(group);
         Scene scene = new Scene(group2, 1920, 1080);
         primaryStage.setMaximized(true);
         primaryStage.setTitle("Decorations Example");
         primaryStage.setScene(scene);
         primaryStage.show();
         tt.fromXProperty().bind(rectangle.translateXProperty().add(rectangle.getLayoutBounds().getWidth()));
         tt.toXProperty().bind(rectangle.translateXProperty().subtract(text.getLayoutBounds().getWidth()));
         tt.setRate(0.077364);
         tt.setInterpolator(Interpolator.LINEAR);
         tt.setCycleCount(Timeline.INDEFINITE);
         tt.playFromStart();
    }

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

0 个答案:

没有答案