我要做的是添加一个标签以跟随滑块旋钮并显示旋钮的值。我目前有一个垂直滑块和一个堆叠在表格单元格内的标签。我能够将标签定位到旋钮的位置并正确更新文本,但在移动旋钮时出现问题。
当我移动旋钮时,只要不更新文本,我就可以使标签跟随它。但是,如果我更新文本,那么标签会重新集中在单元格中,直到旋钮停止移动,此时它将自己置于旋钮上。
如何制作标签,以便在更新文字时不重新定位标签?
以下是我正在进行的一些示例代码:
public class OptionsWindow implements Screen {
private Stage stage;
private Table table;
private Slider slider;
private Label label;
private Skin textSkin = new Skin(Gdx.files.internal("skins/skin.json"),
new TextureAtlas(Gdx.files.internal("skins/text.pack")));
private Skin sliderSkin = new Skin(Gdx.files.internal("skins/skin.json"),
new TextureAtlas(Gdx.files.internal("skins/text.pack")));
private min = 1, max = 2;
@Override
public void show() {
stage = new Stage();
table = new Table();
slider = new Slider(min, max, 0.001f, true, sliderSkin);
label = new Label(""), textSkin);
table.stack(label, slider).height(1000);
table.setFillParent(true);
stage.addActor(table);
Gdx.input.setInputProcessor(stage);
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
label.setY(slider.getValue() - min);
label.setText(slider.getValue());
stage.act();
stage.draw();
}
}
我已经做了很多寻找这个问题的答案,但没有得到任何结果。我还尝试将标签放在容器中并在更改标签文本时移动容器,但同样的结果也会发生。我确定之前有人做过这件事。这似乎是人们想要的东西。欢迎任何帮助。
答案 0 :(得分:0)
以前从未这样做过,我总是在滑块旁边或上方的标签中显示金额以提供反馈。但是你所追求的结果给人一种很好的感觉。您是否尝试在滑块上添加ChangeListener
?每次滑块改变时都会调用它。因此,如果您在其中插入新位置和文本,则应正确更新。
//Slider has to be "final" for the listener.
final Slider slider = new Slider(0, 10, 1, true, skin);
slider.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
label.setY(slider.getValue() - min);
label.setText(slider.getValue());
}
});
这不需要在您的渲染方法中。它是一个监听器,所以只要有事情发生,监听器就会监听它。
答案 1 :(得分:0)
好的,所以我想出了一个解决方法。在更新文本时,标签似乎会移回其单元格对齐位置。要解决这个问题,我只需将我的标签放在一个表格中,每一行都有一行,如下所示:
Table subTable = new Table();
subTable.add().row();
subTable.add(label).row();
subTable.add();
然后在渲染中我计算外部单元格的新高度值并应用它们:
float topH, botH;
// Calculate heights
topH = (1 - slider.getPercent()) * parentTable.getHeight();
botH = slider.getPercent() * parentTable.getHeight();
// Apply heights to exterior table cells
subTable.getCells().get(0).height(topH);
subTable.getCells().get(2).height(botH);
// Update label text
label.setText(slider.getValue());
这只是我所拥有的一种简单形式。您需要考虑标签高度才能使其正确定位。此外,如果您希望它跟随滑块设置的animateDuration中的滑块,您将需要使用getVisualPercent()而不是getPercent()。但是,当您的手指飞出牢房时,这会导致问题。出于某种原因,视觉百分比与手指离开细胞时滑块旋钮的位置有关,而与手指离开细胞的位置无关。
我的解决方法是将animateDuration设置为0.0f并使用getPercent()。如果我或某人想出了一个getVisualPercent()选项的解决方案,那么发布它也会很好。