同步ScrollView和NestedScrollView

时间:2015-12-23 07:20:16

标签: android scrollview footer nestedscrollview

我有以下布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nestedscrollview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/inner_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <NESTED VIEWS>

            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>

        <LinearLayout
            android:id="@+id/outer_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <OUTER VIEWS>

        </LinearLayout>
    </LinearLayout>
</ScrollView>

我的问题是我希望ScrollView首先滚动,如果ScrollView已经移动了一点点,否则NestedScrollView可以消耗触摸。目前,NestedScrollView获取触摸事件并仅消耗滚动,之后ScrollView将接收触摸。我已经尝试过使用onInterceptTouchEvent并对其进行了实验,但无济于事。有什么指针吗?

这是正确的方法还是我使用其他一些视图组合? (协调员布局可能?)

1 个答案:

答案 0 :(得分:1)

所以我扩展了ScrollView并使其工作如下:

private static final int SCROLL_THRESHOLD = 10;

private boolean mScrolling;

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (getScrollY() > SCROLL_THRESHOLD) {
        mScrolling = true;
        onTouchEvent(ev);
        return false;
    } else if (mScrolling) {
        mScrolling = false;
        return false;
    }
    if (ev.getActionMasked() == MotionEvent.ACTION_UP) {
        mScrolling = false;
    }
    return super.onInterceptTouchEvent(ev);
}

适合我。如果有人有更好的解决方案,请告诉我。