android中的两个嵌套垂直滚动视图
我使用两个垂直滚动视图(例如,父视图和子视图)。问题是我不能滚动我的子视图,而是滚动我的整个父视图,是否有任何方法可以限制我的父视图在滚动我的子视图时滚动,反之亦然android中的两个嵌套垂直滚动视图,android,android-scrollview,Android,Android Scrollview,我使用两个垂直滚动视图(例如,父视图和子视图)。问题是我不能滚动我的子视图,而是滚动我的整个父视图,是否有任何方法可以限制我的父视图在滚动我的子视图时滚动,反之亦然 需要帮助…提前谢谢 试试这个 注:此处parentScrollView表示外部ScrollView,childScrollView表示内部ScrollView parentScrollView.setOnTouchListener(new View.OnTouchListener() { @Override
需要帮助…提前谢谢 试试这个 注:此处parentScrollView表示外部ScrollView,childScrollView表示内部ScrollView
parentScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.v(TAG, "PARENT TOUCH");
findViewById(R.id.child_scroll).getParent()
.requestDisallowInterceptTouchEvent(false);
return false;
}
});
childScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.v(TAG, "CHILD TOUCH");
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
您需要处理触摸事件才能有效地执行此操作
outerScrollView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
findViewById(R.id.inner_scroll).getParent()
.requestDisallowInterceptTouchEvent(false);
return false;
}
});
innerScrollView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
-以下是您可以通过描述找到的解决方案 //对于所有子滚动内容,我们必须遵循上面的说明 我
这两种方法可以解决您的问题。这有助于更好地理解:
childScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
parentScrollV.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
parentScrollV.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
尽管此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。@BrianWhite感谢您的建议,是的,您的观点是正确的。“findViewById(R.id.inner_scroll)。getParent()表示“parentScrollView”
childScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
parentScrollV.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
parentScrollV.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});