リージョンサーフェスには多くのImagePanelがあります。私はグループに入れておく。彼らはチェーンで水平にスクロールするはずです。 enter image description herejavafx-8での複数のタイムラインアニメーション
私がこれを動作させるために書いたいくつかの方法があります。 など。左の切り替え位置。 (rects - rectangles。以前は長方形でした)。
//--------- OO<->OO OOOOOO OOOO -----------------------
private void shiftAnimatedInLeft(ObservableList rects)
{
ParallelTransition pt = new ParallelTransition();
for (int i = 0; i < rects.size(); i++)
{
double startPosition = ((ImagePanel) rects.get(i)).getTranslateX();
double finishPosition = -(rects
.size() - i) * getSideImageOffset() - getCenterOffset() - (IMAGE_WIDTH * (1 - SCALE_SMALL)/2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().addAll(
new KeyFrame(new Duration(0),
new KeyValue(((ImagePanel) rects.get(i)).translateXProperty(),
startPosition,
INTERPOLATOR)),
new KeyFrame(new Duration(500),
new KeyValue(((ImagePanel) rects.get(i)).translateXProperty(),
finishPosition,
INTERPOLATOR))
);
pt.getChildren().add(timeline);
// timeline.play();
}
pt.play();
}
など。要素を中央から左にシフトします。
//--------- OOOO <-OOOOOO OOOO -----------------------
private void shiftAnimatedCenterToLeft(ImagePanel rect)
{
double startPosition = rect.getTranslateX();
double finishPosition = - getSideImageOffset() - getCenterOffset() - (IMAGE_WIDTH*(1-SCALE_SMALL)/2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().addAll(
new KeyFrame(new Duration(0),
new KeyValue(rect.translateXProperty(), startPosition, INTERPOLATOR),
new KeyValue(rect.scaleXProperty(), rect.getScaleX(), INTERPOLATOR),
new KeyValue(rect.scaleYProperty(), rect.getScaleY(), INTERPOLATOR),
new KeyValue(rect.angle, -270.0, INTERPOLATOR),
new KeyValue(rect.opacity, 1.0, INTERPOLATOR),
new KeyValue(rect.vboxStyle, "imagePanelBlackVBox", INTERPOLATOR)),
new KeyFrame(new Duration(500),
new KeyValue(rect.translateXProperty(), finishPosition, INTERPOLATOR),
new KeyValue(rect.scaleXProperty(), SCALE_SMALL, INTERPOLATOR),
new KeyValue(rect.scaleYProperty(), SCALE_SMALL, INTERPOLATOR),
new KeyValue(rect.angle, ANGLE, INTERPOLATOR),
new KeyValue(rect.opacity, 0.0, INTERPOLATOR),
new KeyValue(rect.vboxStyle, "imagePanelWhiteVBox", INTERPOLATOR))
);
timeline.play();
}
など
これらの方法はonKeyPressed(左\右)またはマウスホイールのスクロールイベントを使用します。
最後に、問題:これを独立したアプリケーションで使用しようとすると、正常に動作しますが、うまくいきません。しかし、私はそれを別のアプリケーションに統合しようとしている場合、すべてが実際に遅くなり、全体のアニメーションが遅くなります。