我有以下布局:
<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并对其进行了实验,但无济于事。有什么指针吗?
这是正确的方法还是我使用其他一些视图组合? (协调员布局可能?)
答案 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);
}
适合我。如果有人有更好的解决方案,请告诉我。