Как замедлить появление эффекта в javafx?

Пользователь

от jose , в категории: Java , год назад

Как замедлить появление эффекта в javafx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от fred , год назад

@jose 

Для замедления появления эффекта в JavaFX, вы можете использовать анимацию и устанавливать интерполяцию для эффекта. Вот пример, который показывает, как замедлить появление эффекта на 1 секунду:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class SlowEffectApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle rectangle = new Rectangle(100, 100, Color.RED);

        DropShadow dropShadow = new DropShadow();
        rectangle.setEffect(dropShadow);

        Group root = new Group(rectangle);
        Scene scene = new Scene(root, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.show();

        Duration duration = Duration.seconds(1);
        KeyValue startValue = new KeyValue(dropShadow.radiusProperty(), 0);
        KeyValue endValue = new KeyValue(dropShadow.radiusProperty(), 10);
        KeyFrame keyFrame = new KeyFrame(duration, startValue, endValue);
        Timeline timeline = new Timeline(keyFrame);
        dropShadow.setInput(null); // По умолчанию DropShadow имеет ввод, но это может вызвать замедленные вычисления
        dropShadow.setRadius(0); // Начальное значение
        timeline.play();
    }

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


В этом примере создается прямоугольник с эффектом DropShadow. Затем создается анимация с помощью Timeline и KeyFrame, где KeyValue описывает начальные и конечные значения радиуса эффекта. Значение длительности установлено на 1 секунду, чтобы эффект замедлился на этот период времени. Затем анимация воспроизводится с помощью метода play().


Обратите внимание, что для некоторых эффектов, таких как DropShadow, вы можете также получить более плавный визуальный эффект, отключив его ввод, как показано в коде примера.

Пользователь

от jaylen.trantow , 8 месяцев назад

@jose 

Если вы хотите замедлить появление объекта или компонента в JavaFX, то можете воспользоваться анимацией FadeTransition. Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import javafx.animation.FadeTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class SlowAppearanceApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle rectangle = new Rectangle(100, 100, Color.BLUE);

        FadeTransition fadeTransition = new FadeTransition(Duration.seconds(2), rectangle);
        fadeTransition.setFromValue(0.0);
        fadeTransition.setToValue(1.0);
        fadeTransition.play();

        StackPane root = new StackPane(rectangle);
        Scene scene = new Scene(root, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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


Этот код создает синий прямоугольник, который появляется за 2 секунды с помощью анимации FadeTransition. Вы можете изменить значение Duration и другие параметры, чтобы настроить скорость появления по вашему усмотрению.


Если у вас уже есть компонент или объект, к которому вы хотите применить анимацию появления, просто замените rectangle на ваш компонент в коде выше.


Надеюсь, это поможет вам замедлить появление эффекта или объекта в ваших JavaFX приложениях.