我内部有一个ScrollView
和线性布局。在线性布局内,我有多个视图。多个视图之一(可以说是DrawView)用于绘制内容,因此我必须重写该方法的onTouchEvent
并绘制内容。目前,当我在DrawView
上拖动或移动时,ScrollView
还会处理导致整个视图移动的触摸。我想要的是,当我触摸DrawView
时,滚动视图不应移动。我在这里做了一些答案
How to vary between child and parent view group touch events
但是我找不到可以在DrawView
中添加的任何内容,这将阻止ScrollView
上下移动。请注意,DrawView
不会扩展ViewGroup
,因此我无权访问requestDisallowInterceptTouchEvent
答案 0 :(得分:1)
每当DrawView发生触摸事件时,就可以防止ScrollView滚动。为此,您需要创建一个自定义ScrollView调用,例如 [Original Code Snippet]
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)
。
答案 1 :(得分:1)
您可以从ScrollView
的{{1}}获得DrawView
:
onTouchEvent
然后,您可以在ScrollView scrollView = (ScrollView) getParent();
上调用requestDisallowInterceptTouchEvent
,以防止在您触摸scrollView
时滚动它。
DrawView
答案 2 :(得分:0)
所以我最终在DrawView
方法的onTouchEvent
中完成了此操作
getParent().requestDisallowInterceptTouchEvent(true);
,成功了!