对touch事件传递的简单理解
对View事件传递的理解。看的这篇。
对事件传递有了大致的了解。
onInterceptTouchEvent 函数决定是否将事件拦截,拦截之后,该控件的全部子控件接收不到这个事件。onTouchEvent 函数推断是否消费此事件,在父控件把事件传递到子控件的过程中,假设都没有拦截,那么消息会传递究竟层控件,底层控件能够选择消费或者不消费。假设消费,那么事件到此终止,假设没有消费。则一层一层传递给父类。假设中途被拦截了,那么拦截的那个控件充当上述过程的底层控件。最重要的,在这个过程中,事件所经过的控件,都运行了onTouchEvent 方法,仅仅只是返回值不同确定消费与否而已,比方。父控件onTouchEvent返回值为true,子控件为false,且父控件没有拦截。事件的终点是父控件。可是子控件的onTouchEvent方法是运行了!仅仅只是没有消费。
在touch过程中,仅仅有action_dowm事件消费了。才干消费move和up事件。也好理解,不按下,怎么移动和抬起。
之前在研究下拉刷新控件时,遇到的问题:当下拉区域宽度大于临界值时。这时松开手指则開始刷新,假设这时我想取消,那么仅仅能手指向上滑,使这个宽度小于临界宽度再松手就好了,可是,实际的情况是,这时手指向上滑,ListView也開始滑动了,下拉区域就在屏幕之外了。正确的应当是把ListView禁止滑动,过会再取消禁止。当时的解决的方法是在ListView onTouchEvent()中,推断这一情况,并直接返回true就能够解决。当时的理解非常肤浅。仅仅想返回true就把事件消费了。就完事了。如今想想全然不是那回事,所以又一次看那段代码。下拉刷新控件的简单分析
尝试把ListView中super.onTouchEvent(ev)输出,发现这个值是true,感觉不正确啊,和我想的不同,既然都是返回true。为什么还会有上述的解决的方法。于是猜想super.onTouchEvent(ev)不仅仅单纯返回一个true那么简单,可能还响应和改变ListView的滚动栏,打开AbsListView.java。查看这种方法,果然有非常多非常多代码,这样就能够解释了。直接返回true,从而没有运行AbsListView中默认的onTouchEvent方法,所以滚动栏才没有滚动。
ListView相当于父控件。item是子控件。而item布局里的其它控件就是子子控件,依照功能需求能够通过控制touch事件传递来实现。
对touch事件传递的简单理解的更多相关文章
- Android touch 事件传递机制
前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事 ...
- Android Touch事件传递机制全面解析(从WMS到View树)
转眼间近一年没更新博客了,工作一忙起来.非常难有时间来写博客了,因为如今也在从事Android开发相关的工作,因此以后的博文也会很多其它地专注于这一块. 这篇文章准备从源代码层面为大家带来Touch事 ...
- Android Touch事件传递机制通俗讲解
在讲正题之前我们讲一段有关任务传递的小故事,抛砖迎玉下: 话说一家软件公司,来一个任务,分派给了开发经理去完成: 开发经理拿到,看了一下,感觉好简单,于是 开发经理:分派给了开发组长 开发组长:分派给 ...
- 菜鸟进阶Android Touch事件传递(四)
尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/44343477 在该系列文章第四篇.我准备介绍一下viewpage ...
- Android Touch事件传递机制引发的血案
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38942135 关于Android Touch事件传递机制我之前也写过两篇文章,自觉得对Tou ...
- Android Touch事件传递机制 二:单纯的(伪生命周期)
转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...
- Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
ViewGroup View Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...
- Android Touch事件传递机制 二:单纯的(伪生命周期) 这个清楚一点
转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...
- Android Touch事件传递机制详解 下
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38025165 资源下载:http://download.csdn.net/detail/yu ...
随机推荐
- POJ 1269 Intersecting Lines 直线交
不知道谁转的计算几何题集里面有这个题...标题还写的是基本线段求交... 结果题都没看就直接敲了个线段交...各种姿势WA一遍以后发现题意根本不是线段交而是直线交...白改了那个模板... 乱发文的同 ...
- coverage python 代码覆盖率工具使用(django 使用)
1. 安装包 pip install coverage 2.启动程序 coverage run -m pytest 3.获取html格式的报告文件 coverage html 4.创建配置文件 .co ...
- 一个简单RPC框架是怎样炼成的(II)——制定RPC消息
开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 以下,我们先看一个普通的过程调用 class Client(object): def _ ...
- 74LS153 选择器 【数字电路】
74LS153 我用了八个不同频率的方波信号,用153当作信号选择器,控制环节的开关是4通道的选择器,00 01 10 11分别选择通道 0 1 2 3 以下是八选一的demo
- Python笔记---错误笔记
Python---错误笔记 1. Python编码问题: 我们在编写 Python 脚本时,往往会写上中文凝视. 可是有时候,当我们执行程序时.却发现例如以下错误:SyntaxError: Non-A ...
- heap-adb shell查看堆栈使用
今天在使用eclipse中的heap查看oom的时候,发现手机(eng版本)非常的卡,后来换成usr版本,又连接不上eclipse.最后听别人说,可以使用adb shell进行查看.指令如下 adb ...
- Dcloud课程9 天气小助手如何实现
Dcloud课程9 天气小助手如何实现 一.总结 一句话总结:调用天气的接口,如果网上找不到好用的,而如果仅仅是测试,那就自己写一个简单的接口就可以了. 1.dcloud中的css样式怎么调? 和网页 ...
- 73.fseek与宽字符读取文件
fseek //文件路径 ] = "1.txt"; //FILE *pf = fopen(path, "a+");//尾部添加,文件指针在尾部 //FILE * ...
- golang filepath.Walk遍历指定目录下的所有文件
package main import ( "fmt" "os" "path/filepath" ) func walkFunc(path ...
- CSS min-height不能解决垂直外边距合并问题
垂直外边距合并有一种情况是嵌套元素的垂直外边距合并,当父级元素没有设定外边距时,在顶部或者底部边缘的子元素的垂直外边距就会和父级的合并,导致父级也有了“隐形”的垂直外边距. 当父级元素的min-hei ...