ViewGrop 滑动与 子View点击事件冲突解决办法
2017-12-27 11:39
453 查看
横向滑动的ViewGroup中做如下操作
或者
private boolean mScrolling; private float touchDownX; private float touchDownY; @Override public boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchDownX = event.getX(); touchDownY = event.getY(); mScrolling = false; break; case MotionEvent.ACTION_MOVE: int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) { mScrolling = true; } else { mScrolling = false; } break; case MotionEvent.ACTION_UP: mScrolling = false; break; } return mScrolling; } private float x2 = 0; private float y2 = 0; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: return true; case MotionEvent.ACTION_UP: x2 = event.getX(); y2 = event.getY(); float slop = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); // swipe left if (touchDownX - x2 > slop) { // TODO 左滑操作 } // swipe right if (touchDownX - x2 < -slop) { // TODO 右滑操作 } break; } return super.onTouchEvent(event); }
或者
private boolean mScrolling; private float touchDownX; private float touchDownY; @Override public boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchDownX = event.getX(); touchDownY = event.getY(); mScrolling = false; break; case MotionEvent.ACTION_MOVE: int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) { mScrolling = true; } else { mScrolling = false; } break; case MotionEvent.ACTION_UP: mScrolling = false; break; } return mScrolling; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: return true; case MotionEvent.ACTION_UP: int deltaX = (int) (event.getX() - touchDownX); int deltaY = (int) (event.getY() - touchDownY); int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); if (Math.abs(deltaX) > slop) { // swipe left if (deltaX < -Math.abs(deltaY) * 2) { // TODO 左滑操作 } // swipe right if (deltaX >= Math.abs(deltaY) * 2) { // TODO 右滑操作 } } break; } return super.onTouchEvent(event); }
相关文章推荐
- 关于ScrollView和WebView滑动事件冲突的解决办法
- 背景视图上点击事件与tableView冲突的解决办法
- 从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法
- Unity上路(一):Srollview的Cell点击与滑动事件冲突的问题解决
- textview文本片段点击事件与textview点击事件冲突执行两次(最终解决办法)
- SwipeRefreshLayout与ViewPager滑动事件冲突源码分析及解决办法
- IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法
- 解决ViewPager的左右滑动和点击返回事件的冲突
- TableView cell的选中事件 与手势点击事件 冲突解决办法
- textview文本片段点击事件与textview点击事件冲突执行两次(最终解决办法)
- Tap手势与UITableView点击事件冲突解决办法
- IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法
- 从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法
- 解决ScrollView嵌套viewpager滑动事件冲突问题
- Android滑动和点击手势冲突解决办法
- 解决ViewPager与父ViewGrop的事件冲突
- 解决ViewFlow在Scrollview下滑动不灵敏的BUG(解决viewflow与父控件的滑动事件冲突问题)
- View的滑动方式及滑动冲突解决方法(事件分发)
- 安卓两个竖直方向滑动的view嵌套,解决事件冲突
- 父视图的UITapGestureRecognizer和子视图UICollectionView的cell点击冲突解决办法