2016-11-10 5 views
1

Ich möchte ein RippleAnimation schaffen, so habe ich einen Kreis und verwendet ScaleTransition und steckte es in eine Button mit der Methode setGraphic(..);JavaFX RippleAnimation über einen Knopf


Beispielcode:

 final Circle circle = new Circle(3); 
     circle.setFill(Color.color(0, 0, 0, 0.2)); 
     ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(500), circle); 
     scaleTransition.setToX(50f); 
     scaleTransition.setToY(50f); 
     scaleTransition.setAutoReverse(false); 
     scaleTransition.setCycleCount(1); 
     button.setGraphic(circle); 
     button.setOnMouseEntered(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       scaleTransition.play(); 
      } 
     }); 
... 

aber es wird über die Button:

enter image description here

Wie kann ich erreichen, dass der Kreis nicht über den Knopf kommt?

Antwort

1

Einfach Form Clipping verwenden:

Rectangle clip = new Rectangle(); 
clip.widthProperty().bind(button.widthProperty()); 
clip.heightPropety().bind(button.heightProperty()); 

circle.setClip(clip); 

Hoffnung das funktioniert, weil nicht mit setGraphics() je gearbeitet. Versuchen Sie vielleicht, Taste + Kreis in eine StackPane zu setzen, um die gleichen Ergebnisse zu erzielen.

+0

scaleTransition macht den Kreis groß, aber die Form ändert sich nicht in den Clip (?) (ich kann es nicht in Englisch erklären ...) so habe ich Gewinde und machte den Radius des Kreises lang. Es hat funktioniert, danke! – Person

+0

Mit einem Thread hoffe ich, dass Sie die 'Timeline'-Klasse meinen. Verwenden Sie niemals andere Threads als den FX-Anwendungs-Thread, um eine Live-Szene zu ändern. – Mordechai

+0

Oh, Timeline ist einfacher und stabiler. Vielen Dank! – Person