我里面有一个ScrollView
和线性布局。在线性布局中,我有多个视图。多个视图之一(比如说 DrawView(用于绘制内容,因此我必须覆盖该方法onTouchEvent
并绘制内容。目前,当我在DrawView
上拖动或移动时,ScrollView
还处理导致整个视图移动的触摸。我想要的是当我触摸DrawView
时,滚动视图不应该移动。我在这里浏览了其中一些答案
如何在子视图和父视图组触摸事件之间切换
但是我没有找到任何可以添加DrawView
的东西,以防止ScrollView
上下移动。请注意,DrawView
不会扩展ViewGroup
所以我无权访问requestDisallowInterceptTouchEvent
你可以从DrawView
的onTouchEvent
中获取ScrollView
:
ScrollView scrollView = (ScrollView) getParent();
然后,您可以在scrollView
上调用requestDisallowInterceptTouchEvent
,以防止它在触摸DrawView
时滚动。
scrollView.requestDisallowInterceptTouchEvent(true);
您可以在 DrawView 获得触摸事件时阻止滚动视图。为此,您需要创建自定义 ScrollView 调用,如下所示[原始代码片段]
public class MyScrollView extends ScrollView {
private boolean enableScrolling = true;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (scrollingEnabled()) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (scrollingEnabled()) {
return super.onTouchEvent(ev);
} else {
return false;
}
}
private boolean scrollingEnabled(){
return enableScrolling;
}
public void setScrolling(boolean enableScrolling) {
this.enableScrolling = enableScrolling;
}
}
您可以根据需要致电scrollView.setScrolling(true/false)
。
所以我最终在onTouchEvent
方法的DrawView
中这样做
getParent().requestDisallowInterceptTouchEvent(true);
,它奏效了!