我正在尝试在Android中以编程方式滚动一个HorizontalScrollView。
然而我只发现了这个方法:
scroll.fullScroll(View.FOCUS_DOWN)
我希望滚动视图到正中间位置。
有什么提示吗?
我知道有一种方法可以滚动到精确的位置:setScrollX
,但参数需要计算,我不知道怎么算。
我正在尝试在Android中以编程方式滚动一个HorizontalScrollView。
然而我只发现了这个方法:
scroll.fullScroll(View.FOCUS_DOWN)
我希望滚动视图到正中间位置。
有什么提示吗?
我知道有一种方法可以滚动到精确的位置:setScrollX
,但参数需要计算,我不知道怎么算。
scrollTo
方法,并通过获取 y 底部坐标的一半来滚动它。myScrollView.scrollTo(0, myScrollView.getBottom()/2);
对于一个水平滚动视图:
myScrollView.scrollTo(widthOfScrollView/2, 0);
虽然这是一个老问题,但我发现其他答案对我不起作用。以下方法效果很好。
val vto = viewTreeObserver
vto.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val maxScroll = scrollView.getChildAt(0).width - scrollView.width
scrollView.scrollTo(maxScroll / 2, 0)
viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
ViewTreeObserver vto = scroll.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
scroll.scrollTo(scroll.getChildAt(0).getWidth()/2, 0);
}
});
这个有效!
如果要在Kotlin中轻松实现此操作,而又不使用OnGlobalLayoutListener,可以使用以下代码,其中wideView是ScrollView中的视图。
wideView.apply { post { scrollView.scrollTo((left + right - scrollView.width) / 2, 0) } }
getRight()
。这样行得通吗? - Alexis C.HorizontalScrollView scrollViewSplash = (HorizontalScrollView) this.findViewById(R.id.scrollViewSplash); scrollViewSplash.scrollTo(scrollViewSplash.getRight()/2, 0);
- Reinherd