View滑动冲突处理方法(外部拦截法、内部拦截法)
来源:互联网 发布:飞利浦呼吸机读卡软件 编辑:程序博客网 时间:2024/04/30 17:58
1、外部拦截法 (子view代码无需修改)(符合view事件分发机制)
说明:需要在父ViewGroup,重写onInterceptTouchEvent方法,根据业务需要,判断哪些事件是父Viewgroup需要的,需要的话就对该事件进行拦截,然后交由onTouchEvent方法处理,若不需要,则不拦截,然后传递给子view或子viewGroup,
代码:public boolean onInterceptTouchEvent(MotionEvent ev) { int y= (int) ev.getY(); switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: yDown=y; isIntercept=false; break; case MotionEvent.ACTION_MOVE: yMove=y; if (yMove-yDown<0){ //根据业务需求更改判断条件,判断是时候需要拦截 isIntercept=false; }else if(yMove-yDown>0&&getChildAt(0).getScrollY()==0){ isIntercept=true; }else if(yMove-yDown>0&&getChildAt(0).getScrollY()>0){ isIntercept=false; } break; case MotionEvent.ACTION_UP: isIntercept=false; break; } return isIntercept; //返回true表示拦截,返回false表示不拦截}
2、内部拦截法(父viewgroup需要重写onInterceptTouchEvent)(不符合view事件分发机制)
说明:顾名思义就是在子view中拦截事件,父viewGroup默认是不拦截任何事件的,所以,当事件传递到子view时,
子view根据自己的实际情况来,如果该事件是需要子view来处理的,那么子view就自己消耗处理,如果该事件不需要由子view来处理,那么就调用getParent().requestDisallowInterceptTouchEvent()方法来通知父viewgroup来拦截
这个事件,也就是说,叫父容器来处理这个事件,这刚好和view的分发机制相反。
代码: **(需要注意,要确保MotionEvent.ACTION_DOWN时不拦截)**//子view的代码·public boolean dispatchTouchEvent(MotionEvent ev) { int y= (int) ev.getY(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: getParent().requestDisallowInterceptTouchEvent(true); yDown=y; break; case MotionEvent.ACTION_MOVE: yMove=y; Log.e("mes",yMove+"!!!"); int scrollY = getScrollY(); if (scrollY == 0&&yMove-yDown>0) { //根据业务需求判断是否需要通知父viewgroup来拦截处理该事件 //允许父View进行事件拦截 Log.e("mes",yMove-yDown+"拦截"); getParent().requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: break; } return super.dispatchTouchEvent(ev);}
//父viewgroup代码 (要确保down是不拦截,move和up时要拦截)public boolean onInterceptTouchEvent(MotionEvent ev) { if(ev.getAction()==MotionEvent.ACTION_DOWN){ return false; }else{ return true; }}
1 0
- View滑动冲突处理方法(外部拦截法、内部拦截法)
- 使用外部拦截法处理滑动冲突
- 滑动冲突之外部拦截法
- 解决view 滑动事件冲突(实战篇-内部拦截法)
- 自定义View事件拦截机制(自定义viewGroup和外部法解决滑动冲突)
- view滑动冲突解决实战篇2(外部拦截法)
- 处理滑动冲突:外部拦截标准模板
- android 解决滑动冲突的外部拦截法
- 点击事件的拦截处理滑动冲突
- View 滑动冲突处理方法
- Android从零开搞系列:自定义View(9)事件分发+事件拦截(滑动冲突)
- View滑动冲突处理
- Android 滑动,拦截事件处理
- Android 滑动,拦截事件处理
- View滑动冲突的处理
- View的滑动冲突处理
- AppcompatActivity拦截View创建方法
- spring 拦截器无法拦截类内部的方法调用
- Android开发之Fragment的加载方式
- eclipce创建maven项目
- EM-LPC1768开发板原理图
- Spring(四)基于XML装配bean(实例化方式)
- python爬虫简单的抓页面图片并保存到本地
- View滑动冲突处理方法(外部拦截法、内部拦截法)
- overridePendingTransition函数
- http://www.mat.univie.ac.at/~neum/glopt.html
- hdu 1158 Employment Planning
- Android静态安全检测 -> 强制类型转换本地拒绝服务漏洞
- json-server快速“伪造”后台接口
- 机器学习中的PR曲线和ROC曲线
- URL Schemes 程序跳转
- 图像识别(5)——《OpenCV3编程入门-毛星云》第三部分 掌握imgproc组件