Android处理touch冲突的解决办法
16lz
2021-01-26
在android的中,经常会用到scrollview内嵌套listview这样的操作,或者嵌套其他控件。在处理touch事件的时候,经常会出现,只能相应某一个控件的touch事件,不能实现理想的效果。
想要实现自己 想要的效果。可以在内部的控件中做处理。
实现setOnTouchListener,如下所示:
listView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic 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);
这样就可以解决事件冲突的问题了。
更多相关文章
- 最全面的安卓ANR
- Android学习笔记十四之RelativeLayout相对布局
- 关于直接在View中实现Gesture的功能
- Android开发之异步详解(二)之AsyncTask
- android 编译出来的执行文件 not executable: magic 7F45
- Android(安卓)4.0 编译全程
- Android(安卓)自定义控件实现ListView索引
- (笔记)Android(安卓)studio——相对布局(RelativeLayout)
- Day2.3--Android常用布局之RelativeLayout