国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

解決DragViewHelper和RecyclerView滑動沖突

2019-11-09 17:24:54
字體:
來源:轉載
供稿:網友

解決DragViewHelper和RecyclerView滑動沖突

當沒有recyclerview的時候 點擊拖動的view 會直接走onTouchEvent回調,也就是走DragViewHelper的PRocessTouchEvent 如果有recyclerview的時候 點擊會走onInterceptTouchEvent ,也就是走DragViewHelper的shouldInterceptTouchEvent, 進入源碼之后

public boolean shouldInterceptTouchEvent(MotionEvent ev) { final int action = MotionEventCompat.getActionMasked(ev); final int actionIndex = MotionEventCompat.getActionIndex(ev); if (action == MotionEvent.ACTION_DOWN) { // Reset things for a new event stream, just in case we didn't get // the whole previous stream. cancel(); } if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); switch (action) { case MotionEvent.ACTION_DOWN: { final float x = ev.getX(); final float y = ev.getY(); final int pointerId = ev.getPointerId(0); saveInitialMotion(x, y, pointerId); final View toCapture = findTopChildUnder((int) x, (int) y); // Catch a settling view if possible. if (toCapture == mCapturedView && mDragState == STATE_SETTLING) { tryCaptureViewForDrag(toCapture, pointerId); }}

可以看到點擊的時候是捕獲不到我們要拖動的控件的

那么我們只需要在onInterceptTouchEvent回調中通過判斷點中的view是不是自己要拖動的view 來調用shouldInterceptTouchEvent還是processTouchEvent

代碼如下

@Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean isCanDragge = false; switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: { final float x = ev.getX(); final float y = ev.getY(); final View toCapture = findTopChildUnder((int) x, (int) y); isCanDragge = toCapture != null && (toCapture == mLeftDragView || toCapture == mRightDragView); break; } } if (isCanDragge) { mDragger.processTouchEvent(ev); return super.onInterceptTouchEvent(ev); } else { return mDragger.shouldInterceptTouchEvent(ev); } } public View findTopChildUnder(int x, int y) { if (x >= mLeftDragView.getLeft() && x < mLeftDragView.getRight() && y >= mLeftDragView.getTop() && y < mLeftDragView.getBottom()) { return mLeftDragView; } if (x >= mRightDragView.getLeft() && x < mRightDragView.getRight() && y >= mRightDragView.getTop() && y < mRightDragView.getBottom()) { return mRightDragView; } return null; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙县| 石城县| 正蓝旗| 阿拉善左旗| 三明市| 朝阳区| 夹江县| 都安| 砚山县| 平安县| 北碚区| 凤翔县| 琼结县| 泽州县| 弥渡县| 会理县| 冕宁县| 湘阴县| 桐乡市| 英吉沙县| 读书| 彭山县| 岚皋县| 霍州市| 开封县| 西充县| 贡觉县| 色达县| 和田市| 彩票| 甘德县| 成都市| 台北市| 随州市| 章丘市| 赞皇县| 仙游县| 阳朔县| 马龙县| 伊吾县| 长乐市|