2017-03-10 10 views
0

リージョンサーフェスには多くの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(左\右)またはマウスホイールのスクロールイベントを使用します。

最後に、問題:これを独立したアプリケーションで使用しようとすると、正常に動作しますが、うまくいきません。しかし、私はそれを別のアプリケーションに統合しようとしている場合、すべてが実際に遅くなり、全体のアニメーションが遅くなります。

答えて

0

Platform.runLater()を使用して別のスレッドでアニメーションを実行することもできます。JProfilerなどのプロファイラでアプリケーションのパフォーマンスをテストしたり、テストしたりすることができます。

関連する問題