1. 秦子帅的博客首页
  2. Android

自定义View(3)-实例分析View与ViewGroup的触摸事件传递机制

实例分析View与ViewGroup的触摸事件传递机制

今天通过一个demo来分析一下,主要是自定义一个Button和layout,通过点击按钮来测试事件的传递效果。

1.首先建立一个类RTButton继承Button;重写它的dispatchTouchEvent,onTouchEvent方法。分别在DOWN,MOVE,UP时打印句子,方便运行时查看。如下代码:

2.首先建立一个类RtLayout继承LinearLayout;重写它的dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent方法。分别在DOWN,MOVE,UP时打印句子,方便运行时查看。如下代码:

3.在布局文件中放入自定义控件:

4.在MainActivity中添加按钮的点击事件,再添加按钮的触摸事件,并重写Activity的dispatchTouchEvent,onTouchEvent事件

5.测试
都是默认的状态,我们直接运行一下,结果如下:

自定义View(3)-实例分析View与ViewGroup的触摸事件传递机制

从运行结果我们会运行顺序如下:

由此我们印证了触摸事件是由外到内传递的。
大家是不是对onTouch----DOWN比较疑惑,ontouch事件为什么早于onTouchEvent事件?其实我们上一节的View源码分析就已经讲到了,截图如下:

自定义View(3)-实例分析View与ViewGroup的触摸事件传递机制

从源码中我们发现onTouch早于onTouchEvent

现在我们把RtLayout中的dispatchTouchEvent直接消费掉,也就是返回true
运行后:

自定义View(3)-实例分析View与ViewGroup的触摸事件传递机制

说明了事件只传递到了RtLayout。大家也可以自己去试一试,这样才能深入的了解。大家如果有不懂的可以问我。


原文始发于微信公众号( 秦子帅 ):自定义View(3)-实例分析View与ViewGroup的触摸事件传递机制

发布者:秦子帅,转转请注明出处:http://qinzishuai.cn/index.php/2018/11/10/0a43f3d5df/

联系我们

912241847

在线咨询:点击这里给我发消息

邮件:qzs531156@163.com

QR code