对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事件传递来实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-04 00:48:31

对touch事件传递的简单理解的相关文章

菜鸟进阶之Android Touch事件传递(二)

这是touch事件传递系列博客的第二篇,如果想了解touch和click的那些事,请浏览投产事件传递系列的第一篇.http://blog.csdn.net/bingospunky/article/details/43603397 理理思路,我发现touch传递这部分的内容很多,所以每篇博客介绍一个方面比较好.这篇博客主要介绍touch事件传递的现象,一个简单的demo,让大家可以看到touch一步一步传递的过程.下篇博客中在研究源码是怎么实现的.再后面的博客会试图改变这篇文章看到的touch的传

Android Touch事件传递机制全面解析(从WMS到View树)

转眼间近一年没更新博客了,工作一忙起来.非常难有时间来写博客了,因为如今也在从事Android开发相关的工作,因此以后的博文也会很多其它地专注于这一块. 这篇文章准备从源代码层面为大家带来Touch事件的传递机制.我这里分析的源代码时Android4.4的. 说到分析源代码,光看肯定是不行的,一定要亲自去跟,而且要边跟边思考,所以在下一篇中.会有一个Demo来为大家详细分析源代码的走向. 以下进入正题,先来看下Android中事件的分类: 1.键盘事件:主要是指按下虚拟键盘的某个按键.或者机身的

Android touch 事件传递机制

前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事件进行拦截.这个时候我们就需要明白android touch 事件传递机制, (2)以前很多时候比较模糊,也许是网上看到也有很多事件传递的相关文章,但我看着头晕,解释不彻底,有的说得一半,总算不满足不满意,于是据我自己的理解来彻底的来整理下具体的是怎么个传递方式,分享给大家,希望大家看到有什么不对的

【转】Android Touch事件传递机制解析

原文地址:http://www.cnblogs.com/runssnail/p/4250549.html 说明:本文在原文地址上有所改动 一.小故事 在讲正题之前我们讲一段有关任务传递的小故事,抛砖迎玉下: 话说一家软件公司,来一个任务,分派给了开发经理去完成 开发经理拿到,看了一下,感觉好简单,于是 开发经理:分派给了开发组长 开发组长:分派给了自己组员(程序员) 程序员:分派给了自己带的实习生. 实习生:好苦逼,无法分派,怎么办啊?只能自己干了 但是实习生能不能做好,有两种情况了. 情况一:

Android Touch事件传递机制详解 上

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/37961997 最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘记了,其实网上关于Touch事件的传递的文章真的很多,但是很少有系统性的,都是写了一个简单的demo运行了一下,对于我们了解Android Touch事件基本上没有任何帮助. 今

android Touch事件传递小结

这次还是先贴上测试代码吧.. 主布局文件是个三层结构,最外层和中间层都是LinearLayout的子类,里层是个TextView: <com.example.touchevent.OutterLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/o

Android Touch事件传递机制引发的血案

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38942135 关于Android Touch事件传递机制我之前也写过两篇文章,自觉得对Touche事件还是理解得比較清楚的,可是近期遇到的一个问题,让我再次对Android Touche事件进行一次学习. 我的关于Android Touche事件传递机制的文章例如以下: http://blog.csdn.net/yuanzeyao/article/details/37961997 http

菜鸟进阶Android Touch事件传递(四)

尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/44343477 在该系列文章第四篇.我准备介绍一下viewpager的touch事件处理. 假设想了解touch和click的那些事,请浏览touch事件传递系列的第一篇http://blog.csdn.net/bingospunky/article/details/43603397 假设想了解touch事件一步一步传递的路线,请浏览touch事件传递系列的第二篇

菜鸟进阶之Android Touch事件传递(三)

费了这么大劲,终于写完了,这是我的原创.转载请说明出处:http://blog.csdn.net/bingospunky/article/details/44156771 这是touch传递系列文章的第三篇,我打算在这篇文章里从源码的角度解释dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent方法的返回值影响touch传递的原理. 如果想了解touch和click的那些事,请浏览touch事件传递系列的第一篇http://blog.csdn.