如何在特定位置修复ScrollPane滚动条位置,以便显示例如其子表的最后一项而不是第一项Table(默认值)?我尝试使用setScrollX和setScrollY,但它不起作用。
我有一个游戏级菜单(有多个级别),我想在打开该菜单时向用户显示最后一个解锁级别。
答案 0 :(得分:4)
在尝试致电layout()
或setScrollX
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();
您也可以使用
代替设置scrollPercentscrollPane.scrollTo(x, y, width, height);
或
scrollPane.setScrollY(y);
答案 4 :(得分:1)
此代码设置ScrollPane的位置,宽度和高度。
scroll.setBounds(0, 60, Gdx.graphics.getWidth(), 200);
答案 5 :(得分:1)
对我来说,以前的所有答案均无效:
即使多次调用scrollPane.layout()
,滚动窗格的areaHeight
(scrollHeight
)仍为-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
}
}
一个副作用是在每次更改布局,调整大小等之后再次向下滚动,但这对我来说很好,因为无论如何布局都是短暂的。