2016-04-19 7 views
1

Ich mag bewegen (Animation) Striche in dieser Linie animieren: bis zur Gesamtlänge der Elemente in dem Schlaganfall StrichWie die gestrichelte Linie JavaFX

Line l=new Line(); 
    l.getStrokeDashArray().addAll(25d, 20d, 5d, 20d); 

Antwort

3

Animieren die stokeDashOffsetProperty der Linie von einem Wert von 0 Array. Führen Sie einfach die timeline in umgekehrter Richtung, wenn Sie in die entgegengesetzte Richtung animieren möchten.

offset1 offset2

import javafx.animation.*; 
import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.shape.Line; 
import javafx.stage.Stage; 
import javafx.util.Duration; 

public class LineStrokeAnimator extends Application { 
    @Override public void start(Stage stage) { 
     Line line = new Line(20, 100, 80, 20); 
     line.getStrokeDashArray().setAll(25d, 20d, 5d, 20d); 
     line.setStrokeWidth(2); 

     final double maxOffset = 
       line.getStrokeDashArray().stream() 
         .reduce(
           0d, 
           (a, b) -> a + b 
         ); 

     Timeline timeline = new Timeline(
       new KeyFrame(
         Duration.ZERO, 
         new KeyValue(
           line.strokeDashOffsetProperty(), 
           0, 
           Interpolator.LINEAR 
         ) 
       ), 
       new KeyFrame(
         Duration.seconds(2), 
         new KeyValue(
           line.strokeDashOffsetProperty(), 
           maxOffset, 
           Interpolator.LINEAR 
         ) 
       ) 
     ); 
     timeline.setCycleCount(Timeline.INDEFINITE); 
     timeline.play(); 

     stage.setScene(new Scene(new Group(line), 100, 120)); 
     stage.show(); 
    } 

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