欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中RecyclerView嵌套滑動(dòng)沖突解決的代碼片段

 更新時(shí)間:2020年04月08日 16:16:52   作者:owner_of_dog_mi  
這篇文章主要為大家詳細(xì)介紹了Android中RecyclerView嵌套滑動(dòng)沖突解決的代碼片段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在縱向RecyclerView嵌套橫向RecyclerView時(shí),如果縱向RecyclerView有下拉刷新功能,那么內(nèi)部的橫向RecyclerView的橫向滑動(dòng)體驗(yàn)會(huì)很差.(只有純橫向滑動(dòng)時(shí),才能滑動(dòng)內(nèi)部的橫向RecyclerView,否則滑動(dòng)事件就會(huì)影響到下拉刷新),添加攔截判斷.

public class MySwipeRefreshLayout extends SwipeRefreshLayout {

 private boolean mIsVpDragger;
 private final int mTouchSlop;
 private float startY;
 private float startX;

 public MySwipeRefreshLayout(Context context) {
 super(context);
 mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
 }

 public MySwipeRefreshLayout(Context context, AttributeSet attrs) {
 super(context, attrs);
 mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
 }


 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
 int action = ev.getAction();
 switch (action) {
  case MotionEvent.ACTION_DOWN:
  // 記錄手指按下的位置
  startY = ev.getY();
  startX = ev.getX();
  // 初始化標(biāo)記
  mIsVpDragger = false;
  break;
  case MotionEvent.ACTION_MOVE:
  // 如果viewpager正在拖拽中,那么不攔截它的事件,直接return false;
  if (mIsVpDragger) {
   return false;
  }

  // 獲取當(dāng)前手指位置
  float endY = ev.getY();
  float endX = ev.getX();
  float distanceX = Math.abs(endX - startX);
  float distanceY = Math.abs(endY - startY);
  // 如果X軸位移大于Y軸位移,那么將事件交給viewPager處理。
  if (distanceX > mTouchSlop && distanceX > distanceY) {
   mIsVpDragger = true;
   return false;
  }
  break;
  case MotionEvent.ACTION_UP:
  case MotionEvent.ACTION_CANCEL:
  // 初始化標(biāo)記
  mIsVpDragger = false;
  break;
 }
 // 如果是Y軸位移大于X軸,事件交給swipeRefreshLayout處理。
 return super.onInterceptTouchEvent(ev);
 }
}

更多關(guān)于滑動(dòng)功能的文章,請(qǐng)點(diǎn)擊專題: 《Android滑動(dòng)功能》

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論