之前写过一个方案(添加链接描述),突然觉得很麻烦,于是有了新的方案:
首先先说要解决的问题: 当父布局能滑动,子View也能滑动,就会出现滑动冲突
解决思路:我们按下子View时,设置父布局不监听滑动事件,抬起子View时设置父布局继续监听滑动事件
比上一篇优点在哪:上一篇需要操作父类对象,很麻烦,这一篇可以直接在子View中完成任务。
第一步:在子View中添加这个方法
/**
* 设置父类监听或者不要监听触摸事件
* 说明:这是一个简单粗暴的方法,请求所有的父布局全部监听或者全部不要监听触摸事件
* @param isDisallowInterceptTouchEvent
*/
public void requestParent(boolean isDisallowInterceptTouchEvent){
ViewGroup parent=null;
for (int k=0;k<15;k++){ //15代表你布局嵌套的层数,具体看你的布局复杂程度
try {
if (parent==null){
parent = (ViewGroup) getParent();
if (parent!=null){
parent.requestDisallowInterceptTouchEvent(isDisallowInterceptTouchEvent);
}
}else {
parent = (ViewGroup) parent.getParent();
if (parent!=null){
parent.requestDisallowInterceptTouchEvent(isDisallowInterceptTouchEvent);
}
}
}catch (Exception e){
}
}
}
第一步:在子View的onTouchEvent中发出请求
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN){
requestParent(true);
return true;
}
if (event.getAction()==MotionEvent.ACTION_UP) {
requestParent(false);
}
return super.onTouchEvent(event);
}