SwipeRefreshLayout blocking horizontally scrolled RecyclerView

前端 未结 3 919
生来不讨喜
生来不讨喜 2021-01-19 10:10

My setup is simple enough:



        
3条回答
  •  遇见更好的自我
    2021-01-19 10:47

    As per this discussion about SRL and HorizontalScrollView, I created the counterpart for the SwipeRefreshLayout:

    public class OnlyVerticalSwipeRefreshLayout extends SwipeRefreshLayout {
    
      private int touchSlop;
      private float prevX;
      private boolean declined;
    
      public OnlyVerticalSwipeRefreshLayout( Context context, AttributeSet attrs ) {
        super( context, attrs );
        touchSlop = ViewConfiguration.get( context ).getScaledTouchSlop();
      }
    
      @Override
      public boolean onInterceptTouchEvent( MotionEvent event ) {
        switch( event.getAction() ){
          case MotionEvent.ACTION_DOWN:
            prevX = MotionEvent.obtain( event ).getX();
            declined = false; // New action
            break;
    
          case MotionEvent.ACTION_MOVE:
            final float eventX = event.getX();
            float xDiff = Math.abs( eventX - prevX );
            if( declined || xDiff > touchSlop ){
              declined = true; // Memorize
              return false;
            }
            break;
        }
        return super.onInterceptTouchEvent( event );
      }
    }
    

    and usage in XML:

    
    
       
    
    
    

提交回复
热议问题