日常项目中经常碰到滑动冲突问题。比如 父控件和子控件都可以朝同一方向滑动,(recyclerview 套用recyclerview等)
此时子控件 继承对应控件重写事件分发,举个例子try-catch一定要有 相信我不然有个错误会崩
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
try {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if (需要父view接收事件的条件){
getParent().requestDisallowInterceptTouchEvent(false);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_UP:
break;
}
}catch (Exception e){
}
return super.dispatchTouchEvent(event);
}
然后试试 可行,然后多动动 有可能报错pointerIndex out of Range 看日志哪个控件出问题了,继承原来那个控件(如 TouchViewPager extends ViewPager) 重写下面方法 xml中用这个控件(TouchViewPager)
/**
* 物理防崩
* @param ev
* @return
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}