2013年7月21日日曜日

Java FX2のアニメーションをラムダで書き直してみる

Java FX2 を触ってみた。の続き。

Java8のラムダを使って記述したら、確かにTimelineにKeyFrameが並び、アニメーションが順番に実行される、という流れが非常に分かりやすくなりました。コード量も約半減。

@FXML
private Label resultText;

private TranslateTransition slideInAnimation;
private FadeTransition fadeInAnimation;
private FadeTransition fadeOutAnimation;

final private Timeline animation = new Timeline(
 new KeyFrame(Duration.seconds(0),e -> slideInAnimation.play()),
 new KeyFrame(Duration.seconds(0),e -> fadeInAnimation.play()),
 new KeyFrame(Duration.seconds(2),e -> fadeOutAnimation.play())
);

@Override
public void initialize(URL arg0, ResourceBundle arg1) {
 slideInAnimation = TranslateTransitionBuilder.create()
  .node(resultText)
  .duration(Duration.seconds(0.4))
  .fromX(100.0)
  .toX(0)
  .interpolator(Interpolator.EASE_OUT)
  .build();

 fadeInAnimation = FadeTransitionBuilder.create()
  .node(resultText)
  .duration(Duration.seconds(0.5))
  .fromValue(0)
  .toValue(1)
  .build();

 fadeOutAnimation = FadeTransitionBuilder.create()
  .node(resultText)
  .duration(Duration.seconds(0.5))
  .fromValue(1)
  .toValue(0)
  .build();
}

private void showMessage(String text){
 animation.stop();
 resultText.setOpacity(0);
 resultText.setVisible(true);
 resultText.setStyle("-fx-text-fill:#606060");
 resultText.setText(text);
 animation.play();
}


あとnew Duration()ではなくて、Duration#seconds()の方が分かりやすいね。

ついでにアニメーションをinitializeのタイミングで一度だけ生成するように修正するとともに、TransitionBuilderを利用するように修正しました。

しかし、JDK1.8にした際にJava FXも同梱のものに変えてみたのですが、TransitionBuilderはDeprecatedになっているようです。どうもjavaFX8のドキュメントを見るとBuilder系のクラスが軒並みDeprecatedになってるようで、次期バージョンでは消えるらしいのですが、理由が見当たらない…。

0 件のコメント:

コメントを投稿