首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX ProgressBar:如何添加动画?

JavaFX ProgressBar:如何添加动画?
EN

Stack Overflow用户
提问于 2014-03-30 21:33:32
回答 1查看 1.8K关注 0票数 0

我创建了一个进度条并更改了条形图的颜色。

是否可以像引导动画一样将动画添加到进度条中?

下面是示例:链接在这里

实际上,我找到了解决办法,但这不是个好办法。

css

代码语言:javascript
复制
.progress-bar-1 > .bar {
-fx-background-color: linear-gradient(
    from 0em 0.75em to 0.75em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-2 > .bar {
-fx-background-color: linear-gradient(
    from 0.25em 0.75em to 1em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-3 > .bar {
-fx-background-color: linear-gradient(
    from 0.5em 0.75em to 1.25em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-4 > .bar {
-fx-background-color: linear-gradient(
    from 0.75em 0.75em to 1.5em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-5 > .bar {
-fx-background-color: linear-gradient(
    from 1em 0.75em to 1.75em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-6 > .bar {
-fx-background-color: linear-gradient(
    from 1.25em 0.75em to 2em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-7 > .bar {
-fx-background-color: linear-gradient(
    from 1.5em 0.75em to 2.25em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-8 > .bar {
-fx-background-color: linear-gradient(
    from 1.75em 0.75em to 2.5em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-9 > .bar {
-fx-background-color: linear-gradient(
    from 2em 0.75em to 2.75em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-10 > .bar {
-fx-background-color: linear-gradient(
    from 2.25em 0.75em to 3em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-11 > .bar {
-fx-background-color: linear-gradient(
    from 2.5em 0.75em to 3.25em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

.progress-bar-12 > .bar {
-fx-background-color: linear-gradient(
    from 2.75em 0.75em to 3.5em 0px,
    repeat,
    -fx-accent 0%,
    -fx-accent 49%,
    derive(-fx-accent, 30%) 50%,
    derive(-fx-accent, 30%) 99%
);}

我创建了12个css。并使用AnimationTimer循环这12个css。

比如:

代码语言:javascript
复制
    String str = "progress-bar-%d";
    progress.getStyleClass().add(String.format(str, i));
    AnimationTimer timer = new AnimationTimer(){
        @Override
        public void handle(long l){
            if(j != 10) {j++; return;}
            j = 0;
            progress.getStyleClass().removeAll(String.format(str, i));
            i++;
            if(i == 13){
                i = 1;
            }
            progress.getStyleClass().add(String.format(str, i));
        }
    };
    timer.start();

fxml

代码语言:javascript
复制
<ProgressBar fx:id="progress" prefWidth="200"  progress="0.5"  />
EN

回答 1

Stack Overflow用户

发布于 2014-12-17 19:53:36

我已经意识到了这一点,通过折页代码:

代码语言:javascript
复制
// Set the max status
int maxStatus = 12;
// Create the Property that holds the current status count
IntegerProperty statusCountProperty = new SimpleIntegerProperty(1);
// Create the timeline that loops the statusCount till the maxStatus
Timeline timelineBar = new Timeline(
        new KeyFrame(
                // Set this value for the speed of the animation
                Duration.millis(300),
                new KeyValue(statusCountProperty, maxStatus)
        )
);
// The animation should be infinite
timelineBar.setCycleCount(Timeline.INDEFINITE);
timelineBar.play();
// Add a listener to the statusproperty
statusCountProperty.addListener((ov, statusOld, statusNewNumber) -> {
    int statusNew = statusNewNumber.intValue();
    // Remove old status pseudo from progress-bar
    bar.pseudoClassStateChanged(PseudoClass.getPseudoClass("status" + statusOld.intValue()), false);
    // Add current status pseudo from progress-bar
    bar.pseudoClassStateChanged(PseudoClass.getPseudoClass("status" + statusNew), true);
});

所有这些都不需要进行查找(不推荐的内容),也不需要更改CSS(顺便说一句,如果您经常这样做的话,这确实是“时间/内存消耗”)。

您的CSS将如下所示:

代码语言:javascript
复制
.progress-bar > .bar {
    ...
}
.progress-bar:status1 > .bar {
    ...
}

.progress-bar:status2 > .bar {
    ...
}
...

您也可以使用css-类代替空洞伪的东西,但这是您的选择。

快乐编码,

卡拉什

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档