摘要
父控件拦截子控件的触摸事件解决办法,重写子控件中的onInterceptTouchEvent(boolean)方法,然后设置父控件在执行该方法时返回true,即父控件不拦截子控件的触摸事件。经常遇到的一个触摸冲突的一个控件ViewPager,ViewPager可以左右滑动,每个Fragment展示新闻列表,使用PullToRefreshListView控件,在设置的适配器中第一栏添加头条滚动效果,需要给头条添加左右滑动的事件,这个时候与ViewPager的左右滑动冲突。重写子控件是第一种解决办法,第二种解决办法是重写父控件,其原理就是设置父控件的onInterceptTouchEvent()返回值为true,以后再遇到事件冲突的问题都可以这样子解决。

第一种解决办法:重写子控件
- private ViewGroup parent;
- public void setDisallowInterceptParentTouchEvent(ViewGroup parent) {
- this.parent = parent;
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent arg0) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.onInterceptTouchEvent(arg0);
- }
- @Override
- public boolean onTouchEvent(MotionEvent arg0) {
- if (parent != null) {
- parent.requestDisallowInterceptTouchEvent(true);
- }
- return super.onTouchEvent(arg0);
- }
第二种解决办法:重写父控件
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- requestDisallowInterceptTouchEvent(true);
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent arg0) {
- requestDisallowInterceptTouchEvent(true);
- return super.onInterceptTouchEvent(arg0);
- }
- @Override
- public boolean onTouchEvent(MotionEvent arg0) {
- requestDisallowInterceptTouchEvent(true);
- return super.onTouchEvent(arg0);
- }
解决的原理:设置父控件的onInterceptTouchEvent()返回值为true,请求不拦截触摸事件
当前文章价值0.75元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

发表于2016-06-08 13:04 0楼
这种效果我一般都是直接从网上下载源码,真心不会调试。