package application; import application.colorThemes.Theme; import com.sun.javafx.css.StyleManager; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.scene.Node; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.util.Duration; /** * Created by tareq on 7/13/15. */ public class Button extends javafx.scene.control.Button { boolean animationFinished = true; double radiusSize = 0; double rippleSpeed = 3; //0.5 px/10ms public Button() { super(); setUp(); } public Button(String text) { super("", new MaterialText(text)); setUp(); } public Button(Node n) { super("", n); setUp(); } private void setUp() { sceneProperty().addListener((observable, oldValue, newValue) -> { if (newValue != null) { if (!getScene().getStylesheets().contains(getClass().getResource("application.css").toExternalForm())) getScene().getStylesheets().add(getClass().getResource("application.css").toExternalForm()); } }); getStyleClass().add("material-button"); addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { Rectangle r = new Rectangle(getWidth(), getHeight()); prefHeightProperty().addListener(ev -> r.setHeight(getHeight())); Circle ripple = new Circle(7.5); ripple.setClip(r); ripple.setFill(Color.GRAY); ripple.setCenterX(e.getX()); ripple.setCenterY(e.getY()); ripple.setOpacity(0.2); ripple.setVisible(false); animateRipple(ripple, true, 50); getChildren().add(0, ripple); }); } void animateRipple(Circle ripple, boolean selected, int spread) { ripple.setVisible(true); if (selected) { ripple.setFill(Color.web(Theme.BlueGreen.ACCENT_COLOR)); } else { ripple.setFill(Color.GRAY); } Timeline anim = new Timeline(new KeyFrame(Duration.millis(10), ev -> { ripple.setRadius(radiusSize += rippleSpeed); })); anim.setCycleCount(spread); anim.setOnFinished(ev2 -> { animationFinished = true; radiusSize = 7.5; ripple.setRadius(radiusSize); ripple.setVisible(false); }); anim.play(); } }