Android进阶学习之路——View事件的传递机制
2015-08-02 10:45
609 查看
原理饶口令:事件阶段两步走、向下分发、向上传递、分发可拦截、先分发,后传递,事件消费不传递
事件分发中重要的方法
dispatchTouchEvent 分发事件(只要触摸控件,就会调用控件的DispathTouchEvent方法)
onInterceptTouchEvent 拦截事件
OnTouch View类的抽象方法,让调用者去setOntouchListener的时候实现的方法
onTouchEvent View类自己的方法,复写View的时候,自己去覆盖父类的OnTouchEvent方法。
ViewGroup事件分发原理:
当点击屏幕的时候,获取手指在屏幕上的位置,然后调用当前Activity根布局ViewGroup的dispatchTouchEvent方法。
判断disallowIntercept(是否禁用掉拦截功能,默认false)或(!oninterceptTouchEvent(ev))为true (事件拦截):分发阶段
判断当前手指的点是否位于ViewGroup的子结点上(View或ViewGroup),
如果是则调用子结点的DisaptchTouchEvent方法
(事件向子控件分发):分发阶段
如果不是则调用自己父类(View)的DisapchTouchEvent方法,自己来消费当前事件,如果自己不消费当前事件,
则将事件传递至父控件进行处理,如果父控件也不处理,继续向上传递。
:传递阶段
代码详解
View的事件分发处理:
当自己的DisaptchTouchEvent方法被调用的时候
如果OnTouch返回True,那么就不会执行当前类的OnTouchEvent方法了。
如果当前方法返回true,表示消费掉当前的事件,那么事件也就不会再向上传递了。
OnTouchEvent详解
事件分发有几点需要理清楚的知识点:
事件分发中的View和ViewGroup区别。ViewGroup仅仅是负责事件分发的,和事件的传递。向子控件分发事件还是被传递从而调用自身(父类)的DispatchToucheEvent方法。
触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法
如果子控件dispatchTouchEvent一直返回false,表示不消费当前的事件,那么之后事件会向上传递。
touch事件的层级传递: 如果在执行ACTION_DOWN时返回false,后面一系列其它的action就不会执行。简单的说:当dispatchTouchEvent时行事件分发的时候,只有前一个Action返回true。才会触发后一个Action。 下面是示意图
FLY:以上是自己在学习的过程中所做的笔记,如果有错误的言论或者有没说明白的欢迎评论。咱们共同学习、共同进步
相关学习的URL:/article/1562152.html
事件分发中重要的方法
dispatchTouchEvent 分发事件(只要触摸控件,就会调用控件的DispathTouchEvent方法)
onInterceptTouchEvent 拦截事件
OnTouch View类的抽象方法,让调用者去setOntouchListener的时候实现的方法
onTouchEvent View类自己的方法,复写View的时候,自己去覆盖父类的OnTouchEvent方法。
ViewGroup事件分发原理:
当点击屏幕的时候,获取手指在屏幕上的位置,然后调用当前Activity根布局ViewGroup的dispatchTouchEvent方法。
判断disallowIntercept(是否禁用掉拦截功能,默认false)或(!oninterceptTouchEvent(ev))为true (事件拦截):分发阶段
判断当前手指的点是否位于ViewGroup的子结点上(View或ViewGroup),
如果是则调用子结点的DisaptchTouchEvent方法
(事件向子控件分发):分发阶段
如果不是则调用自己父类(View)的DisapchTouchEvent方法,自己来消费当前事件,如果自己不消费当前事件,
则将事件传递至父控件进行处理,如果父控件也不处理,继续向上传递。
:传递阶段
代码详解
View的事件分发处理:
当自己的DisaptchTouchEvent方法被调用的时候
如果OnTouch返回True,那么就不会执行当前类的OnTouchEvent方法了。
如果当前方法返回true,表示消费掉当前的事件,那么事件也就不会再向上传递了。
OnTouchEvent详解
事件分发有几点需要理清楚的知识点:
事件分发中的View和ViewGroup区别。ViewGroup仅仅是负责事件分发的,和事件的传递。向子控件分发事件还是被传递从而调用自身(父类)的DispatchToucheEvent方法。
触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法
如果子控件dispatchTouchEvent一直返回false,表示不消费当前的事件,那么之后事件会向上传递。
touch事件的层级传递: 如果在执行ACTION_DOWN时返回false,后面一系列其它的action就不会执行。简单的说:当dispatchTouchEvent时行事件分发的时候,只有前一个Action返回true。才会触发后一个Action。 下面是示意图
FLY:以上是自己在学习的过程中所做的笔记,如果有错误的言论或者有没说明白的欢迎评论。咱们共同学习、共同进步
相关学习的URL:/article/1562152.html
相关文章推荐
- Android Service 访问安全
- Android中对Log日志文件的分析
- Android中的长度单位详解(dp、sp、px、in、pt、mm)
- ubuntu14.04 android设备调试问题
- 如何在Android上编写高效的Java代码
- Android中ContentProvider详解例程
- Android DatePicker日期选择器、TimePicker时间选择器的使用
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- Android ListView工作原理完全解析
- Android项目打包成APK文件
- android 进程/线程管理(二)----关于线程的迷思
- 需要根据字典获得drawable,只能写if-else吗
- [深入理解Android卷一全文-第三章]深入理解init
- Android Studio 1.2使用过程问题总结
- Android错误_adb不是内部或外部命令,也不是可运行的程序
- 超越系统权限----Android黑名单电话拦截
- [深入理解Android卷一全文-第三章]深入理解init
- Android 下拉框的实现
- [深入理解Android卷一 全文-第二章]深入理解JNI
- [深入理解Android卷一 全文-第二章]深入理解JNI