读书笔记—View的滑动冲突
来源:互联网 发布:武林外传人物分析 知乎 编辑:程序博客网 时间:2024/05/17 03:04
View的滑动冲突
常见的滑动冲突常见
- 1.外部滑动方向和内部滑动方向不一致。
- 2.外部滑动方向和内部滑动方向一致。
- 3.上面两种情况的嵌套
滑动冲突的解决方式
- 1.外部拦截法
所谓外部拦截法是指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要则不拦截此事件。外部拦截法需要重写父容器的onInterceptTouchEvent方法,在内部做响应的拦截即可。伪代码如下:
public boolean onInterceptTouchEvent(MotionEvent ev){ boolean intercepted=false; int x=(int)ev.getX(); int y=(int)ev.getY(); switch(ev.getAction){ case MotionEvent.ACTION_DOWN: intercepted=false; break; case MotionEvent.ACTION_MOVE: if(父容器需要当前点击事件){ intercepted=true; }else{ intercepted=false; } break; case MotionEvent.ACTION_UP: intercepted=false; break; default: break; } mLastXIntercept=x; mLastYIntercept=y; return intercepted;}
- 内部拦截法
内部拦截法是指父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交由父容器去处理,这种方法和Android中的事件分发机制不一致,需要配合requestDisallowInterceptTouchEvent方法才能正常工作,使用起来较外部拦截法稍微复杂。
public boolean dispatchTouchEvent(MotionEvent ev){ int x=(int)ev.getX(); int y=(int)ev.getY(); switch(ev.getAction){ case MotionEvent.ACTION_DOWN: parent.requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: int deltaX=x-mLastX; int deltaY=y-mLastY; if(父容器需要此类点击事件){ parent.requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: break; default: break; } mLastX=x; mLastY=y; return super.dispatchTouchEvent(ev);}
在这种方法中,为什么父容器不能拦截ACTION_DOWN事件?
因为ACTION_DOWN事件不受FLAG_DISALLOW_INTERCEPT这个标记位的控制,所以一旦父容器拦截ACTION_DOWN事件,那么所有的事件都无法传递到子元素中去,这样内部拦截就无法起作用了。
0 0
- 读书笔记—View的滑动冲突
- view 的滑动冲突
- View的滑动冲突
- View的滑动冲突
- View的滑动冲突
- View的滑动冲突
- View 的滑动冲突
- View的滑动冲突
- View 的滑动冲突
- View的滑动冲突
- View的滑动冲突
- View的滑动冲突
- View的滑动冲突问题
- View滑动冲突的处理
- View的滑动冲突解决方案
- View的滑动冲突解决
- view的滑动冲突解决
- view滑动冲突的解决方案
- sed用法总结
- Ubuntu 下配置 PhpStorm 自动编译 LESS 生成css和source-map
- Java千百问_05面向对象(002)_package和import作用是什么
- 编程规范
- 开源G711A/PCMA、G711U/PCMU、G726、PCM转码AAC项目EasyAACEncoder
- 读书笔记—View的滑动冲突
- 在org中使用table.el
- IE和DOM事件流的区别
- UI开发
- Lintcode 二叉树的路径和
- MySQL多关键字多字段模糊查询
- bzoj 1009(KMP+矩阵乘法)
- 理解进程调度时机跟踪分析进程调度与进程切换的过程
- iOS应用访问不了网络的解决方法 App Transport Security has blocked a cleartext HTTP