国产探花免费观看_亚洲丰满少妇自慰呻吟_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; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金塔县| 额敏县| 昌平区| 瑞金市| 深州市| 阿荣旗| 莎车县| 潼关县| 抚宁县| 延津县| 铅山县| 桓台县| 开阳县| 和平县| 宁南县| 西华县| 南岸区| 周至县| 江阴市| 荃湾区| 韶山市| 竹溪县| 德昌县| 延吉市| 遵义市| 沛县| 江达县| 建阳市| 大悟县| 牡丹江市| 庆元县| 光泽县| 四平市| 徐水县| 始兴县| 庆元县| 旅游| 雅江县| 邯郸县| 姚安县| 郧西县|