Android事件分发,事件拦截,事件处理总结
来源:互联网 发布:linux 运行rpm文件 编辑:程序博客网 时间:2024/05/21 22:36
对于安卓的事件分发,拦截及事件处理无论是面试还是在日常应用中都涉及的比较多,网上的帖子也很多,感觉都没说透,或者没直接点出来,我认为郭神这篇博客写的事件分发理解的挺好 http://blog.csdn.NET/sinyu890807/article/details/9097463
1.对于事件的传递流程:安卓点击事件MotionEvent 传递流程 Activity - window(phoneWindow)-DecorView(顶级View,其实是个ViewGroup),由DecorView的dispatchTouchEvent向下分发事件,具体可看下里面的源码,如果ViewGroup中没有子元素,事件传递到此处,说明已经传到最底层了,它直接拦截掉这个事件交由其onTouchEvent处理,如果onTouchEvent不处理,则交由其上级处理,均不处理,则最后交由Activity 的onTouchEvent来处理这个事件。再比如:TextView 设置点击事件,这个传递过程是这样的,Activity(dispatchTouchEvent)-Window - DecorView,这个跟上面是一样的,因为TextView设置了onClickListener,当事件传递到TextView时,因为TextView 继承自View,View中没有拦截事件的方法,默认来说,到最底层View来说onTouchEvent 默认返回为true 来处理这个事件的,因为设置了onClickListener,最后会回调TextView的onClick方法,由此可见,onClickListener在事件传递的最末端!
2.对于事件的拦截(一般来说ViewGroup中拦截的方法onInterceptTouchEvent),事件在分发的过程中,该父类group不想让下面的子类收到这个事件,这个消息,则他会在onInterceptTouchEvent中返回true,表示我要拦截这个事件,不让子类知道;返回false,则不拦截,事件继续向下传递。
3.对于事件的处理 ,事件的处理在对应拦截的那个类的onTouchEvent方法中进行处理,onTouchEvent 有actionDown,move,up等方法,如果最后onTouchEvnet返回true,表示我要处理消费了这个事件,反之,则不处理这个事件,交给上层ViewGroup或View来处理这个事件。
总结:
事件分发:dispatchTouchEvent retrurn true 则向下分发事件,false,则不向下分发。
事件拦截:onInterceptTouchEvent return true 则表示我要拦截,事件流到自己的onTouchEvent中处理,false,则不拦截,继续的向下传递事件。
事件处理:onTouchEvent reture true 则表示我要处理,反之,我不处理,交给上层ViewGroup或View来处理这个事件。
原文:http://blog.csdn.net/shenshibaoma/article/details/52786021?locationNum=8
- Android事件分发,事件拦截,事件处理总结
- Android事件分发,事件拦截,事件处理总结
- android事件分发,拦截,处理
- Android 事件拦截分发
- Android事件分发,拦截,处理机制
- android事件分发、拦截、处理(未完)
- Android触摸事件的分发、拦截、处理
- android 中的事件分发和事件拦截
- android View事件分发和事件拦截
- Android---事件分发与拦截
- Android事件分发总结
- Android 事件分发总结
- android事件分发总结
- Android事件分发总结
- android事件分发总结
- Android 事件分发 总结
- Android事件分发总结
- Android事件分发总结
- Android进程保活招式大全
- TeamTalk源码分析(三) —— 服务器端的程序架构介绍
- 验证码识别处理--基于python(一)
- Python格式化字符串
- L1-008. 求整数段和
- Android事件分发,事件拦截,事件处理总结
- PHP 7.1 + Apache 2.4 + MySQL 5.6非集成环境配置
- 示波器测485串口波特率的使用方法
- nyoj-12-喷水装置(二)
- Java使用JSCH实现对FTPS服务器文件操作
- springMvc 中mvc:interceptor拦截器详解
- Hadoop Cluster启动后数据节点(DataNode)进程状态丢失
- 关于类型萃取
- 常用Shell基本命令