LibGdx如何在特定位置修复ScrollPane滚动条位置?

时间:2013-05-20 13:00:12

标签: scroll scrollbar libgdx scrollpane

如何在特定位置修复ScrollPane滚动条位置,以便显示例如其子表的最后一项而不是第一项Table(默认值)?我尝试使用setScrollX和setScrollY,但它不起作用。

我有一个游戏级菜单(有多个级别),我想在打开该菜单时向用户显示最后一个解锁级别。

6 个答案:

答案 0 :(得分:4)

在尝试致电layout()setScrollX

之前,您可能需要自己手动拨打ScrollPane上的setScrollY

答案 1 :(得分:2)

如果你有一个垂直堆叠的窗格,这对我有用:

setScrollPercentY(100);

答案 2 :(得分:2)

这对我有用:

scrollPane.layout();
scrollPane.setScrollPercentY(100);

答案 3 :(得分:2)

如果您想避免ScrollPanes fling效果,请在show()方法中使用以下代码,以便ScrollPane立即显示您指定的确切位置。

scrollPane.layout(); 
scrollPane.setScrollPercentY(.5f);
scrollPane.updateVisualScroll();

您也可以使用

代替设置scrollPercent
scrollPane.scrollTo(x, y, width, height);

scrollPane.setScrollY(y);

答案 4 :(得分:1)

此代码设置ScrollPane的位置,宽度和高度。

scroll.setBounds(0, 60, Gdx.graphics.getWidth(), 200);

答案 5 :(得分:1)

对我来说,以前的所有答案均无效: 即使多次调用scrollPane.layout(),滚动窗格的areaHeightscrollHeight)仍为-2、0或其他。仅在随后的后续布局调用期间,才可以设置正确的高度,从而生成动画,使内容从顶部滑入。

针对我的用例(在添加所有初始内容后滚动到底部)的唯一解决方案是覆盖ScrollPane.layout()并在每次布局更改后滚动到底部:

open class BottomScrollingScrollPane(actor: Actor?, skin: Skin, style: String): ScrollPane(actor, skin, style) {

    override fun layout() {
        super.layout()
        scrollTo(0f, 0f, 0f, 0f)
        updateVisualScroll()
    }
}

...,如果使用libktx,则可选:

@Scene2dDsl
@OptIn(ExperimentalContracts::class)
inline fun <S> KWidget<S>.bottomScrollingScrollPane(
    style: String = defaultStyle,
    skin: Skin = Scene2DSkin.defaultSkin,
    init: KBottomScrollingScrollPane.(S) -> Unit = {}
): KBottomScrollingScrollPane {
  contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) }
  return actor(KBottomScrollingScrollPane(skin, style), init)
}

class KBottomScrollingScrollPane(skin: Skin, style: String) : BottomScrollingScrollPane(null, skin, style), KGroup {
  override fun addActor(actor: Actor?) {
    this.actor == null || throw IllegalStateException("ScrollPane may store only a single child.")
    this.actor = actor
  }
}

一个副作用是在每次更改布局,调整大小等之后再次向下滚动,但这对我来说很好,因为无论如何布局都是短暂的。