关于控件touch事件的整理
来源:互联网 发布:零基础学软件编程 编辑:程序博客网 时间:2024/05/29 13:45
关于touch事件的传递:在Activity中接触屏幕后会产生MotionEvent,传递顺序:
首先触发Activity的dispatchTouchEvent
然后触发Activity的onUserInteraction
然后触发Layou的dispatchTouchEvent
然后触发Layout的onInterceptTouchEvent(onTouchevent)
然后触发View的dispatchTouchEvent
然后触发View的onTouchEvent
其中需要注意的是Layout的onInterceptTouchEvent和onTouchEvent以及View的dispatchTouchEvent和onTouchEvent的使用方法
对于onInterceptTouchEvent而言,其源代码仅一个“return false”,如果需要拦截该层MontionEvent应覆盖并返回true,此时将触发该Layout的onTouchEvent,并且不再向下传递,记住无论是View还是ViewGroup一旦触发onTouchEvent,则本次MontionEvent都不可能向下传递,
对于onTouchEvent,这个函数是触发其他Listener的关键(如click等,但不含onTouchListener),一般来说不应全部覆盖,应该在适时调用Super.onTouchEvent,其返回值意义是若返回true,则后续MontionEvent(down与up间的action)都传递到此onTouchEvent,若返回false则以后的MontionEvent传递到上层onTouchEvent(如Layout的onTouchEvent),
对于View的dispatchTouchEvent,其源代码说明了先调用onTouchListener,若其返回为true,则不再调用onTouchEvent,并dispatchTouchEvent直接返回true,若其返回为false,则调用onTouchEvent,并以onTouchEvent的返回值为最终返回值,
注:View(viewGroup)的dispatch函数由系统上层直接调用,而其他的onTouchEvent,onTouchListener等是由dispatch来调用,其返回值也是先返回给dispatch,再由dispatch返回,故核心应在dispatch函数,故最好不要直接重写该函数,
综上,个人认为对于dispatchTouchEvent与onTouchEvent不应直接覆盖,应适时调用super的代码;
本文出自 “Rainlee的随笔记” 博客,转载请与作者联系!
- 关于控件touch事件的整理
- UIScrollView上的控件处理touch事件
- sencha touch 给没有touch事件的控件添加touch事件
- 关于Touch事件的传递问题
- 关于android touch事件的传递问题
- 关于浏览器touch事件的问题
- 关于touch事件分发
- 关于click事件与touch事件冲突的问题
- 关于 Touch事件和Click事件的冲突问题
- android自定义控件系列教程-----touch事件的传递
- android自定义控件系列教程-----touch事件的传递
- iOS开发:MKNewAnnotationContainerView-截取MKMapView控件上的touch事件
- 关于Android的Touch事件的分发机制
- 关于view的Touch事件的一些理解
- 关于touch事件优先级问题。
- 关于控件的事件穿透
- cocos2dx3.2关于cocos studio中button的touch事件
- cocos2d-x中关于touch事件的响应
- 将泛型集合类(List<T>)转换成DataTable,返回的DataTable所有列的数据类型为string型,且列顺序与字符串提供的字段顺序一致
- bzoj1037(dp 1A)
- android多线程实例及总结
- 关于Bound Services的常用方式
- redhat下给普通用户增加sudo命令,让他可以获得修改等权限
- 关于控件touch事件的整理
- 关于Android如何给传递线程初始化数据
- 突出一个简单粗暴!Android Activity泄漏问题解决方案
- 关于静态变量的继承
- PSR-2 代码风格规范
- 关于android中box2D总结与实例
- 关于java数组的初始化
- 去掉a的虚拟边框
- C++中的头文件