Skip to content

ProgressBar

自 2.2.1

ProgressBar 在可配置的 [min, max] 范围内将数值显示为部分填充的进度条。填充方向、插值动画和内部纹理均可配置。可选的居中 Label 可以覆盖在进度条上方。

ProgressBar 实现了 IBindable<Float>IDataConsumer<Float>,因此其数值可以由数据提供器驱动,并自动与服务端保持同步。

INFO

UIElement 中记录的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。


用法

java
var bar = new ProgressBar();
bar.setRange(0, 100);
bar.setProgress(75f);
parent.addChild(bar);

// 数据绑定(服务端 → 客户端,每 tick 同步)
bar.bindDataSource(DataBindingBuilder.floatValS2C(
    () -> machine.getProgress() / (float) machine.getMaxProgress()
).build());

XML

xml
<!-- 基础进度条,当前值 50% -->
<progress-bar min-value="0" max-value="100" value="50"/>

<!-- 带居中文字标签 -->
<progress-bar min-value="0" max-value="200" value="100" text="my.progress.key"/>
XML 属性类型描述
min-valuefloat最小值。默认值:0
max-valuefloat最大值。默认值:1
valuefloat当前值。默认值:0
textstring设置覆盖层标签(会被翻译)。

内部结构

索引字段类型CSS 类描述
0barContainerUIElement.__progress-bar_bar-container__带有背景纹理和内边距的外部容器。

以下元素嵌套在内部结构中:

字段CSS 类描述
bar.__progress-bar_bar__进度条的填充部分。
label.__progress-bar_label__可选的覆盖层 Label(绝对定位,居中)。

进度条样式

INFO

fill-direction

随着数值增加,进度条填充的方向。

默认值:LEFT_TO_RIGHT

描述
LEFT_TO_RIGHT进度条从左边缘开始增长。
RIGHT_TO_LEFT进度条从右边缘开始增长。
UP_TO_DOWN进度条从上边缘开始增长。
DOWN_TO_UP进度条从下边缘开始增长。
ALWAYS_FULL无论数值如何,进度条始终完全可见。
java
bar.progressBarStyle(style -> style.fillDirection(FillDirection.DOWN_TO_UP));

INFO

interpolate

当为 true 时,进度条会在每个 tick 视觉上动画过渡到目标值,而不是直接跳变。

默认值:true

java
bar.progressBarStyle(style -> style.interpolate(false));

INFO

interpolate-step

插值过程中每个 tick 移动的总范围(max - min)比例。负值使用 partial-tick lerp 以实现更平滑的动画。

默认值:0.1

java
bar.progressBarStyle(style -> style.interpolateStep(0.05f)); // 更慢的动画
bar.progressBarStyle(style -> style.interpolateStep(-1f));    // partial-tick lerp

自定义进度条纹理

进度条的外部容器使用 Sprites.PROGRESS_CONTAINER,填充部分使用 Sprites.PROGRESS_BAR。可以通过样式或 DSL 覆盖这些纹理:

java
bar.barContainer(c -> c.style(s -> s.background(myContainerTexture)));
bar.bar(b -> b.style(s -> s.background(myBarTexture)));

数据绑定

ProgressBar 订阅 IDataProvider&lt;Float&gt; 以自动更新数值。

java
var binding = DataBindingBuilder.floatValS2C(
    () -> machine.getProgress() / (float) machine.getMaxProgress()
).build();

bar.bindDataSource(binding);
bar.unbindDataSource(binding); // 完成时取消绑定

完整的绑定 API 请参见 数据绑定


字段

名称类型访问权限描述
barContainerUIElementpublic final外部容器元素。
barUIElementpublic final填充条元素。
labelLabelpublic final覆盖层标签元素。
progressBarStyleProgressBarStyleprivate (getter)当前进度条样式。
minValuefloatprivate (getter)范围最小值。
maxValuefloatprivate (getter)范围最大值。

方法

方法返回类型描述
setProgress(float)ProgressBar设置当前值(限制在 [min, max] 范围内)。
setRange(float, float)ProgressBar设置 [min, max] 范围并重新评估当前值。
setMinValue(float)ProgressBar设置最小值。
setMaxValue(float)ProgressBar设置最大值。
progressBarStyle(Consumer&lt;ProgressBarStyle&gt;)ProgressBar以流式方式配置 ProgressBarStyle
bar(Consumer&lt;UIElement&gt;)ProgressBar配置填充条元素。
barContainer(Consumer&lt;UIElement&gt;)ProgressBar配置外部容器元素。
label(Consumer&lt;Label&gt;)ProgressBar配置覆盖层标签。
bindDataSource(IDataProvider&lt;Float&gt;)ProgressBar订阅数据提供器。
unbindDataSource(IDataProvider&lt;Float&gt;)ProgressBar取消订阅数据提供器。
getValue()Float返回当前值。
getNormalizedValue()float返回归一化到 [0, 1] 的当前值。

Released under the MIT License.