android 拦截机制的分析
2015-12-03 14:36
218 查看
平常经常用到 onTouchEvent()这个方法,在重写view对触摸事件的处理时返回true对触摸事件进行响应处理.......
今天对android拦截机制做一下总结,形象比喻来说这拦截机制像一个效能好高的机制一样。
假设显示在屏幕中有三层view,第一层viewgroupA、第二层viewgroupB,第三层就是我们想看到的myview,当我们重新这些view时发现viewgroup中有三个处理触摸事件的方法dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()三个方法;重写myview的时候发现只有dispatchTouchEvent()和OntouchEvent()两个方法。
好了好戏开场了,当我们点击屏幕的时候最先感应到点击事件的是viewgroupA(第一层),viewgroupA对事件迅速做出处理:先经过方法dispatchTouchEvent()分发事件吧,分配之后先自己考虑一下经过方法onInterceptTouchEvent(),看看自己能不能做——1)false不能做,接着往下走分给viewgroupB对事件进行处理同样先经过方法dispatchTouchEvent()分发事件吧,分配之后先经过方法onInterceptTouchEvent()[b]自己考虑一下,看看自己能不能做,接着返回false自己不能做,事件终于落到了myview的头上芝麻的大的官也有模有样的学者对事件进行分发onInterceptTouchEvent()没人理没人抢好了自己直接干吧myview的onTouchEvnt()方法上场,myview是个低调的人做完事不要求领赏onTouchEvnt()方法返回true不告诉上级整个方法走完了,myview是个高调的人做完了给上级反映一下返回false让上夸奖一下,经过viewgroupB的onTouchEvnt()然后viewgroupB在看看myview做的怎么样啊,好了(返回false)直接反应给viewgroupA接着冒名顶替,不好(true)直接给你拦截掉。。。[/b]
2)返回true,viewgroupA自己能做,好了直接由viewgroupA的[b]onTouchEvent()方法进行处理完事。。。[/b]
3)返回false,viewgroupA没有拦截交给viewgroupB处理,到viewgropeB的onInterceptTouchEvent时候返回true拦截掉可以自己干,进入viewgroupB的ontouchEvent的方法进行处理,处理完成选择告诉不告诉viewgroupA,[b]ontouchEvent返回false告诉viewgroupA,进入viewgroupA的ontouchEvent的进行处理。[/b]
总结:情况比较多不做一一举例子,简单来讲就是分配事件的时候经过dispatchTouchEvent(),在经过viewgroup的[b]onInterceptTouchEvent()看看是拦截掉自己做还是给下一级别做。[/b]
做事情的时候就是[b]onTouchEvnt(),通过返回true(不告诉上级)做了事情不炫耀低调行的;返回false(告诉上级)做了事情很高调告诉上级,再有上级同样的处理方法.....[/b]
今天对android拦截机制做一下总结,形象比喻来说这拦截机制像一个效能好高的机制一样。
假设显示在屏幕中有三层view,第一层viewgroupA、第二层viewgroupB,第三层就是我们想看到的myview,当我们重新这些view时发现viewgroup中有三个处理触摸事件的方法dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()三个方法;重写myview的时候发现只有dispatchTouchEvent()和OntouchEvent()两个方法。
好了好戏开场了,当我们点击屏幕的时候最先感应到点击事件的是viewgroupA(第一层),viewgroupA对事件迅速做出处理:先经过方法dispatchTouchEvent()分发事件吧,分配之后先自己考虑一下经过方法onInterceptTouchEvent(),看看自己能不能做——1)false不能做,接着往下走分给viewgroupB对事件进行处理同样先经过方法dispatchTouchEvent()分发事件吧,分配之后先经过方法onInterceptTouchEvent()[b]自己考虑一下,看看自己能不能做,接着返回false自己不能做,事件终于落到了myview的头上芝麻的大的官也有模有样的学者对事件进行分发onInterceptTouchEvent()没人理没人抢好了自己直接干吧myview的onTouchEvnt()方法上场,myview是个低调的人做完事不要求领赏onTouchEvnt()方法返回true不告诉上级整个方法走完了,myview是个高调的人做完了给上级反映一下返回false让上夸奖一下,经过viewgroupB的onTouchEvnt()然后viewgroupB在看看myview做的怎么样啊,好了(返回false)直接反应给viewgroupA接着冒名顶替,不好(true)直接给你拦截掉。。。[/b]
2)返回true,viewgroupA自己能做,好了直接由viewgroupA的[b]onTouchEvent()方法进行处理完事。。。[/b]
3)返回false,viewgroupA没有拦截交给viewgroupB处理,到viewgropeB的onInterceptTouchEvent时候返回true拦截掉可以自己干,进入viewgroupB的ontouchEvent的方法进行处理,处理完成选择告诉不告诉viewgroupA,[b]ontouchEvent返回false告诉viewgroupA,进入viewgroupA的ontouchEvent的进行处理。[/b]
总结:情况比较多不做一一举例子,简单来讲就是分配事件的时候经过dispatchTouchEvent(),在经过viewgroup的[b]onInterceptTouchEvent()看看是拦截掉自己做还是给下一级别做。[/b]
做事情的时候就是[b]onTouchEvnt(),通过返回true(不告诉上级)做了事情不炫耀低调行的;返回false(告诉上级)做了事情很高调告诉上级,再有上级同样的处理方法.....[/b]
相关文章推荐
- 有关android NDK
- Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)
- android-Color State List Resource
- 新浪微博Android SDK Java代码规范
- Android动画笔记
- 【资源汇总】Android应用解决方案全攻略
- 【风马一族_Android】代码英语之二 布局文件的Android各个参数
- Android动画学习笔记-Android Animation
- MTK Android software Tools工具的说明
- 安卓JNI--Android studio 1.5 JNI开发初探
- Android 笔记
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android SQLite数据库相关知识
- android 高斯模糊实现
- android 高斯模糊实现
- android 高斯模糊实现
- Android 获取无线蓝牙MAC信息代码
- imx6 android 5.0 权限修改
- Android中JNI编程详解
- Android异步消息框架