JavaFx宽度动画转换与动画

JavaFx宽度动画转换与动画,java,javafx,Java,Javafx,我有一个类,它扩展了一个元素宽度的动画转换: public class Resize extends Transition { private double width; private double diff; private Region region; public ResizeWidth(Duration duration, Region region, double newWidth ) { setCycleDuration(dura

我有一个类,它扩展了一个元素宽度的动画转换:

public class Resize extends Transition {

    private double width;
    private double diff;
    private Region region;

    public ResizeWidth(Duration duration, Region region, double newWidth ) {
        setCycleDuration(duration);
        this.region = region;
        this.width = region.getWidth();
        this.diff= newWidth - width;
    }

    @Override
    protected void interpolate(double frac) {
        region.setPrefWidth(width + (diff * frac));
    }
}
但我认为,没有视觉差异的同一个动画是由动画完成的:

Animation animation = new Timeline(
    new KeyFrame(Duration.seconds(2),
        new KeyValue(field.prefWidthProperty(), 1))
    animation.play();

那么区别是什么?哪种方法更好?

如果两者都有效,请使用更适合您项目的方法。我将考虑的是项目流和可读性。<代码>时间线< /代码>可能比实现<代码>转换< /代码>更容易。这看起来很简单,但如果你看一下内置转换的实现,它们似乎都使用了不容易复制的内部API。只要尝试一下,我就会遇到一些问题,比如如何让转换与类(如
SequentialTransition
paralleltition
)很好地配合。另外,
转换
类似乎都适合使用
节点
,而您需要一个子类:
区域
。不知道这可能会造成多少麻烦。如果两者都有效,请使用更适合您项目的。我将考虑的是项目流和可读性。<代码>时间线< /代码>可能比实现<代码>转换< /代码>更容易。这看起来很简单,但如果你看一下内置转换的实现,它们似乎都使用了不容易复制的内部API。只要尝试一下,我就会遇到一些问题,比如如何让转换与类(如
SequentialTransition
paralleltition
)很好地配合。另外,
转换
类似乎都适合使用
节点
,而您需要一个子类:
区域
。不知道那会造成多少麻烦。