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

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

от jose , в категории: Java , 2 месяца назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от 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, вы можете также получить более плавный визуальный эффект, отключив его ввод, как показано в коде примера.