Android touch事件处理
2016-03-23 00:00
232 查看
看了源码,再看这篇文章 : http://www.2cto.com/kf/201407/316510.html
http://www.open-open.com/lib/view/open1422428386548.html
Android事件分发机制完全解析,带你从源码的角度彻底理解(上) : http://blog.csdn.net/guolin_blog/article/details/9097463
Android事件机制之一:事件传递和消费:http://www.cnblogs.com/lwbqqyumidi/p/3500997.html
Android TouchEvent事件传递机制:http://blog.csdn.net/morgan_xww/article/details/9372285/
Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效:http://blog.csdn.net/guolin_blog/article/details/9671609
点击事件是先分配到Activiy的dispatchTouchEvent(),还是PhoneWindowManager下的内部类DecorView的dispatchTouchEvent()?两者都会调用ViewGroup的dispatchTouchEvent(),进行事件分配。
ViewGroup的dispatchTouchEvent()有两个重要的点:a.具有拦截的onInterceptTouchEvent(),当其返回true时,是不会向下分发点击事件了,而是走自己父类的即View的onTouchEvent()消费事件;b.当一个事件流程内(down->move->up)的前一个事件没有被分发处理,即下一层的ViewGroup或View的方法dispatchTouchEvent()返回了false,后一个事件dispatchTouchEvent()也就不会继续分发给返回false的ViewGroup或View了。
ViewGroup重写了父类View的dispatchTouchEvent(),使其可以将事件先分发给它的子View(也有可能是ViewGroup),但没有重写onTouchEvent()。
一般自定义控件时,会设置OnTouchListener,其重写的方法onTouch()就会在View的dispatchTouch()里优先于onTouchEvent()调用,并且当onTouch()返回true时,onTouchEvent()就不会被调用了!!
控件设置OnClickListener,其重写方法onClick()会在onTouchEvent()的UP事件中处理,当重写了onTouch()并且返回了true,该方法便不会调用了。
dispatchTouchEvent()返回了false,即该层及该层以下(如果有的话)都没有能消费事件,事件会由该层的上一层去处理了,并且参照2的b;
ListView设置OnTouchListener时,需要看情况设置返回true或者false,从而屏蔽掉ListView重实现的的onTouchEvent()。
http://www.open-open.com/lib/view/open1422428386548.html
Android事件分发机制完全解析,带你从源码的角度彻底理解(上) : http://blog.csdn.net/guolin_blog/article/details/9097463
Android事件机制之一:事件传递和消费:http://www.cnblogs.com/lwbqqyumidi/p/3500997.html
Android TouchEvent事件传递机制:http://blog.csdn.net/morgan_xww/article/details/9372285/
Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效:http://blog.csdn.net/guolin_blog/article/details/9671609
点击事件是先分配到Activiy的dispatchTouchEvent(),还是PhoneWindowManager下的内部类DecorView的dispatchTouchEvent()?两者都会调用ViewGroup的dispatchTouchEvent(),进行事件分配。
ViewGroup的dispatchTouchEvent()有两个重要的点:a.具有拦截的onInterceptTouchEvent(),当其返回true时,是不会向下分发点击事件了,而是走自己父类的即View的onTouchEvent()消费事件;b.当一个事件流程内(down->move->up)的前一个事件没有被分发处理,即下一层的ViewGroup或View的方法dispatchTouchEvent()返回了false,后一个事件dispatchTouchEvent()也就不会继续分发给返回false的ViewGroup或View了。
ViewGroup重写了父类View的dispatchTouchEvent(),使其可以将事件先分发给它的子View(也有可能是ViewGroup),但没有重写onTouchEvent()。
一般自定义控件时,会设置OnTouchListener,其重写的方法onTouch()就会在View的dispatchTouch()里优先于onTouchEvent()调用,并且当onTouch()返回true时,onTouchEvent()就不会被调用了!!
控件设置OnClickListener,其重写方法onClick()会在onTouchEvent()的UP事件中处理,当重写了onTouch()并且返回了true,该方法便不会调用了。
dispatchTouchEvent()返回了false,即该层及该层以下(如果有的话)都没有能消费事件,事件会由该层的上一层去处理了,并且参照2的b;
ListView设置OnTouchListener时,需要看情况设置返回true或者false,从而屏蔽掉ListView重实现的的onTouchEvent()。
相关文章推荐
- Android中的跨进程通信的实现(一)——远程调用过程和aidl
- Android开发你早该这么学!
- android webview js交互, 响应webview中的图片点击事件
- Android开发环境笔记
- Android中插件开发篇之—-应用换肤原理解析
- Android中常见IPC方法总结
- Android:windowSoftInputMethod软键盘弹出的问题浅析
- Android项目中引用到其他工程
- Android学习计划
- Android异步加载AsyncTask详解
- 关于Android开发的40条优化建议
- 【Android】3、分析HelloWorld项目目录结构
- Android Stdio程序在虚拟机运行出现enabled ADB integration to be ebabled错误
- 关于android开发自定义view
- Android手机录制屏幕及转GIF
- 活动的生命周期
- Activity生命周期
- Android中简单列表对话框问题
- facebook的图片加载控件SimpleDraweeView的属性
- Android中的软引用、弱引用