参考
http://blog.devwiki.net/index.php/2016/06/13/RecyclerView-Scroll-Listener.html
垂直Recyclerview嵌套水平Recyclerview的时候,有时候水平滑动的事件会被垂直的View消费掉,这时候横划就会比较困难。
解决方案
主要:https://www.jianshu.com/p/4c87e0b6d16c
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
float x = e.getRawX();
float y = e.getRawY();
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
float dealtX = Math.abs(x - lastX);
float dealtY = Math.abs(y - lastY);
if (dealtX > 1f || dealtY > 1f) {
if (dealtY < dealtX * mRatio) {
getParent().requestDisallowInterceptTouchEvent(true);
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
}
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
}
注意:使用上面的方法后,滑动到RecyclerView到最后一个item时,仍然会由子View处理事件,因此,不会响应父View的事件;
这时候可以通过如下方法,在dispatchTouchEvent方法中去获得第一项和最后一项,让子View释放处理
https://www.jianshu.com/p/5eb2de368ea0
相关学习: