如何在显示之前将 ScrollView 的滚动设置为 x 像素?
在 ScrollView 中,我有一些 View ,我知道它会填满屏幕。我可以滚动到第二个 View ,以便在 Activity 启动时第一个 View 不可见吗?
现在我有这样的东西,但我认为它并不完美,有时,我看到第一个 View ,然后滚动到第二个 View
@Override
public void onGlobalLayout() {
if (mHorizontalScrollView.getChildCount() > 0 && mHorizontalScrollView.getChildAt(0).getWidth() > mScreenWidth) {
hsv.scrollTo(100, 0);
}
}
编辑!!
第二次尝试是使用 http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html而不是 http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
在 OnPreDrawListener
中我们可以读到 此时,树中的所有 View 都已测量并给出了一个框架。客户可以使用它来调整他们的滚动边界,甚至可以在绘制发生之前请求一个新的布局。
所以基本上在这一点上我们应该调整滚动。所以我创建了:
@Override
public boolean onPreDraw() {
if (hsv.getChildCount() > 0 && hsv.getChildAt(0).getWidth() > mScreenWidth) {
hsv.scrollTo(100, 0);
return false;
}
return true;
}
但现在它对我不起作用。
最佳答案
我将 onGlobalLayout
与下面的代码组合在一起。使用那个 hack 不是很好,但它仍然非常有效。当我收到 onGlobalLayout 事件时,我检查布局是否完成,如果没问题,我使用下面的方法。
// hsv - horizontal scroll view
private void forceShowColumn(final int column) {
int scrollTo = childViewWidth * column;
if (scrollTo == hsv.getScrollX()) {
return;
}
hsv.scrollTo(scrollTo, 0);
hsv.postDelayed(new Runnable() {
@Override
public void run() {
forceShowColumn(column);
}
}, 10);
}
关于Android ScrollView,在可见之前滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104859/