// androidx.recyclerview.widget.RecyclerView@OverridepublicbooleanonInterceptTouchEvent(MotionEvent e){if(mLayoutSuppressed){// When layout is suppressed, RV does not intercept the motion event.// A child view e.g. a button may still get the click.returnfalse;}// Clear the active onInterceptTouchListener. None should be set at this time, and if one// is, it's because some other code didn't follow the standard contract.
mInterceptingOnItemTouchListener =null;if(findInterceptingOnItemTouchListener(e)){cancelScroll();returntrue;}if(mLayout ==null){returnfalse;}finalboolean canScrollHorizontally = mLayout.canScrollHorizontally();finalboolean canScrollVertically = mLayout.canScrollVertically();if(mVelocityTracker ==null){
mVelocityTracker =VelocityTracker.obtain();}
mVelocityTracker.addMovement(e);finalint action = e.getActionMasked();finalint actionIndex = e.getActionIndex();switch(action){caseMotionEvent.ACTION_DOWN:if(mIgnoreMotionEventTillDown){
mIgnoreMotionEventTillDown =false;}
mScrollPointerId = e.getPointerId(0);
mInitialTouchX = mLastTouchX =(int)(e.getX()+0.5f);
mInitialTouchY = mLastTouchY =(int)(e.getY()+0.5f);if(mScrollState ==SCROLL_STATE_SETTLING){getParent().requestDisallowInterceptTouchEvent(true);setScrollState(SCROLL_STATE_DRAGGING);stopNestedScroll(TYPE_NON_TOUCH);}// Clear the nested offsets
mNestedOffsets[0]= mNestedOffsets[1]=0;int nestedScrollAxis =ViewCompat.SCROLL_AXIS_NONE;if(canScrollHorizontally){
nestedScrollAxis |=ViewCompat.SCROLL_AXIS_HORIZONTAL;}if(canScrollVertically){
nestedScrollAxis |=ViewCompat.SCROLL_AXIS_VERTICAL;}startNestedScroll(nestedScrollAxis,TYPE_TOUCH);break;caseMotionEvent.ACTION_POINTER_DOWN:
mScrollPointerId = e.getPointerId(actionIndex);
mInitialTouchX = mLastTouchX =(int)(e.getX(actionIndex)+0.5f);
mInitialTouchY = mLastTouchY =(int)(e.getY(actionIndex)+0.5f);break;caseMotionEvent.ACTION_MOVE:{finalint index = e.findPointerIndex(mScrollPointerId);if(index <0){Log.e(TAG,"Error processing scroll; pointer index for id "+ mScrollPointerId +" not found. Did any MotionEvents get skipped?");returnfalse;}finalint x =(int)(e.getX(index)+0.5f);finalint y =(int)(e.getY(index)+0.5f);if(mScrollState !=SCROLL_STATE_DRAGGING){finalint dx = x - mInitialTouchX;finalint dy = y - mInitialTouchY;boolean startScroll =false;if(canScrollHorizontally &&Math.abs(dx)> mTouchSlop){
mLastTouchX = x;
startScroll =true;}if(canScrollVertically &&Math.abs(dy)> mTouchSlop){
mLastTouchY = y;
startScroll =true;}if(startScroll){setScrollState(SCROLL_STATE_DRAGGING);}}}break;caseMotionEvent.ACTION_POINTER_UP:{onPointerUp(e);}break;caseMotionEvent.ACTION_UP:{
mVelocityTracker.clear();stopNestedScroll(TYPE_TOUCH);}break;caseMotionEvent.ACTION_CANCEL:{cancelScroll();}}return mScrollState ==SCROLL_STATE_DRAGGING;}