SwipeRefreshLayout和Viewpager的滑動沖突問題

方法一:

問題來源:看過源碼之后發(fā)現(xiàn)在onInterceptTouchEvent中的只要Y軸的移動距離大于? mTouchSlop這個值后就會觸發(fā)下拉刷新的操作。深追之后發(fā)現(xiàn)這個值只有8dp,就是說? 當(dāng)我們下滑了8dp的距離就會開始下拉刷新。那么找到了原因我們開始解決他把。
? -->> 解決方案:自定義一個SwipeRefreshLayout, 在它的onInterceptTouchEvent中,根據(jù)X 軸和Y 軸的 移動的距離差 如果xDis大于YDis?那么不攔截觸摸事件,交給ViewPager處理。反之,交給SwipeRefreshLayout處理。
代碼:

// 判斷 X 軸的 Y 軸的 移動的距離差 來判斷是否 需要攔截事件
public class MySwipeRefreshLayout extends SwipeRefreshLayout {
   // 上一次觸摸時的X坐標(biāo)
   private float mPreDownX;
   private float mPreDownY;
   public MySwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
   }
   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
   case MotionEvent.ACTION_DOWN:
mPreDownX = ev.getX();
mPreDownY = ev.getY();
break;


   case MotionEvent.ACTION_MOVE:
final float eventX = ev.getX();
final float eventY = ev.getY();
float xAbs = Math.abs(eventX - mPreDownX);
float yAbs = Math.abs(eventY - mPreDownY);
//                如果 X 軸移動的 距離大于 Y 軸移動的距離
//                那么 不攔截 觸摸事件 交給 下面的處理
if (xAbs > yAbs) {
   return false;
}
}
return super.onInterceptTouchEvent(ev);
   }
}

方法二:

ViewPager,設(shè)置OnTouchListener,里面當(dāng)ACTION_MOVE的時候設(shè)置SwipeRefreshLayout不可用,
當(dāng)ACTION_UP或者ACTION_CANCEL的時候設(shè)置SwipeRefreshLayout可以,就可以解決這個沖突了

viewPager.setOnTouchListener(new View.OnTouchListener() {
              @Override
             public boolean onTouch(View v, MotionEvent event) {
                  switch (event.getAction()) {
                      case MotionEvent.ACTION_MOVE:
                          swipeRefreshLayout.setEnabled(false);
                          break;
                      case MotionEvent.ACTION_UP:
                      case MotionEvent.ACTION_CANCEL:
                         swipeRefreshLayout.setEnabled(true);
                         break;
                 }
                 return false;
             }
         });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容