在android的中,经常会用到scrollview内嵌套listview这样的操作,或者嵌套其他控件。在处理touch事件的时候,经常会出现,只能相应某一个控件的touch事件,不能实现理想的效果。
想要实现自己 想要的效果。可以在内部的控件中做处理。
实现setOnTouchListener,如下所示:
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
scrollView.requestDisallowInterceptTouchEvent(false); //允许上层控制执行touch事件
}
else {
scrollView.requestDisallowInterceptTouchEvent(true); <span style="font-family: Arial, Helvetica, sans-serif;">//不允许上层控制执行touch事件</span>
}
return false;
}
});
该方法已经满足要求,如果还不行的话。可以试试下面的方法:
自定义一个控件,在里面重写dispatchTouchEvent方法:
if(Math.abs(downX - touchX) > Math.abs(downY - touchY)) {//横向滑动
getParent().requestDisallowInterceptTouchEvent(true);//不允许执行父控件的touch
}
else {
getParent().requestDisallowInterceptTouchEvent(false);//允许执行父控件的touch
}
return super.dispatchTouchEvent(ev);
这样就可以解决事件冲突的问题了。