slidingMenu嵌套recycleView Touch事件冲突的简单解决方案

因为最近在学习recycleView,所以就尝试把项目中的listview换成recycleView。然而这一换出问题了 ,上下滑动的时候总是 会导致左右滑动的slidingMenu 乱滑。导致recycleview上下滑动失灵。

为了解决问题 我就不停的找资料。然后找到了touch事件的传递机制 ,我就开始调试输出。 发现滑动事件总是被上层的slidingMenu给拦截了!

至于touch事件的传递机制,百度一下你就知道 。

大概就是 slidingMenu的    onInterceptTouchEvent  的返回值为true的时候   就会不继续往子VIew传递 事件了 。 滑动事件就会被slidingMenu的ontouch给消费掉了。

这样就导致recycleview 就收不到滑动事件 。 我一开始的想法是  将slidingMenu的 onInterceptTouchEvent 返回值改为false 。 然后在recycleview 中重写ontouch事件

根据滑动方向来判断是否消费这个事件 ,然后在slidingMenu的ontouch中再判断一次 。。。

后来想到 只要重写slidingMenu的onInterceptTouchEvent不就可以了吗  因为slidingMenu是一个左右滑动的控件  所以判断也很简单  

只要判断左右滑动的数值大还是上下滑动的数值大就可以了 

具体方法如下

//记录触摸事件的开始坐标点

private float startPos[]=new float[2];

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

int action=ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:  

//记录touch事件开始的坐标
startPos[0]=ev.getX();
startPos[1]=ev.getY();

break;
case MotionEvent.ACTION_MOVE:

//捕获移动事件  
float x=ev.getX();
float y=ev.getY();
//计算和初始坐标的绝对值  如果左右移动距离 大于上下移动距离  拦截这次的touch事件  反之下发给子view处理
if(Math.abs(x-startPos[0])>Math.abs(y-startPos[1])){
return true;
}else{
return false;
}
}
return super.onInterceptTouchEvent(ev);
}

额 搞定 不过并不清楚 会不会有啥其他bug  反正是解决了我现在的问题QAQ  如有错误 希望各位前辈能指出   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值