Android ScrollView,在可见之前滚动

标签 android

如何在显示之前将 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.htmlOnPreDrawListener 中我们可以读到 此时,树中的所有 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/

相关文章:

android - 无法在 AIDL 接口(interface)中使用库中的对象

java - onClick() 设置增量和延迟

java - android JNI代码中的C内存泄漏

android - 如何从另一个类访问共享首选项 bool 值

android-layout - android中的不同纵向布局

android - 如何在 Android AppWidget 中设置列​​ TableView 的初始滚动位置?

android - LogCat中的 "mWifiServiceMessenger == null"异常意味着什么?

java - 可重复使用的按钮

java - Android:内部类错误

用于浮点值的 Android 复数