gpt4 book ai didi

java - 跨多个控制实例同步转换

转载 作者:行者123 更新时间:2023-11-30 02:25:12 26 4
gpt4 key购买 nike

我有几个自定义控件。要求之一是让控件能够根据其状态闪烁。我正在使用淡入淡出过渡,效果很好。

如何同步淡入淡出过渡,以便多个控件在屏幕上闪烁时,它们以相同的速率淡入和淡出?

我能想到的让这项工作变得轻松的唯一方法是拥有一个静态 ParallelTransition,每个实例在 Activity 时将其淡入淡出过渡添加到其中,但这对我来说听起来不像是一个干净的方法。

最佳答案

您可以使用绑定(bind)将所有内容链接到一个根据时间线变化的键值。

下面的代码将创建一堆圆圈,然后在不同的时间对它们进行闪烁,但是一旦开始闪烁,所有圆圈都会继续一致闪烁(如果您容易患癫痫,请不要运行此代码。 ..)

您可以使用时间轴中使用的值和插值器来获得您想要的效果。

import javafx.animation.*;
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.util.Random;

public class Synchronicity extends Application {
private static final double N = 10;
private static final double R = 10;
private static final Duration D = Duration.seconds(2);

private static final double MIN_VAL = 0.1;
private static final double MAX_VAL = 1;

private static final Random r = new Random();

private final DoubleProperty opacity = new SimpleDoubleProperty(MAX_VAL);
private final Timeline oscillator = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(opacity, MAX_VAL, Interpolator.EASE_BOTH)),
new KeyFrame(D.divide(2), new KeyValue(opacity, MIN_VAL, Interpolator.EASE_BOTH))
);

@Override
public void start(final Stage stage) {
Pane layout = new Pane();
for (int i = 0; i < N; i++) {
Circle circle = new Circle(R, Color.FIREBRICK);
circle.setCenterX(2 * R + i * R * 3);
circle.setCenterY(R * 2);
layout.getChildren().add(circle);

PauseTransition pause = new PauseTransition(D.multiply(r.nextDouble() * N));
pause.setOnFinished(e -> blink(circle));
pause.play();
}
layout.setMinSize(R + N * R * 3,R * 4);

stage.setScene(new Scene(layout));
stage.show();

oscillator.setAutoReverse(true);
oscillator.setCycleCount(Timeline.INDEFINITE);
oscillator.play();
}

private void blink(Node node) {
node.opacityProperty().bind(opacity);
}

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

关于java - 跨多个控制实例同步转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com