终于用上了word 2013来写博客,感觉真是老好了,以前在网页上写,老是要把网页拖上拖下的,每次都要吐一升老血啊,现在用上本地的word,瞬间感觉好多了。还有感谢为word写插件的这个大神,代码高亮真是不错。

上一次写了android按钮点击事件是怎么执行的,涉及到了android的touch 和 click事件,粗略地看了一下源码,解释了一下android Touch和Click事件的流程。这一次,我要继续记录我从Tinera和郭大神那里学习到的知识,自己动手实践一番。

首先,上次说到,当你点击一个按钮的时候,你的ACTION_DOWN事件会被dispatch到你点击的按钮的dispatchTouchEvent()方法,那么我们不禁要想,如果我要在一个按钮父布局里面也放一个touch或者click方法,那么点击这个按钮,会不会调用这个父布局的相应的代码呢?

我们来实验一下:

我们看到,外层的touch事件是不会抢走内层的touch事件的,同样click也是如此。那么dispatchTouchEvent()事件是从里面往外面传的喽,当然不是得,现在只需要知道,传递是从外层往内层传的,只是外层的布局事件没有"阻拦"这个事件的传递而已。

 button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.d("MainActivity", "touch called");
return true;
}
});
relativeLayout1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.d("MainActivity", "relative touch called");
return false;
}
});

我定义了一个MyLayout,在其里面画上一个按钮,然后为他们俩都注册了touch事件,然而只有按钮触发了。

那么为什么说事件是从外往里面传递的呢,这不是说不通吗?既然MyLayout首先接收了事件,为什么要传递,而不是自己处理呢,等等,自己处理就坏了,你点击按钮,然后

被外面的这个viewGroup响应调了,有什么用啊。因此我们要想为什么是从外层往里层而不是从里层往外面传递?好吧,先来实验一下,我们在MyLayout里面重新写一下

onInterceptTouchEvent()这个函数,这个函数在viewgroup里面,默认返回false的,并且只有一句返回。它有什么用呢,先来来看看ViewGroup的dispatchTouchEvent()方法

Android事件分发原理的更多相关文章

  1. Android View 的事件分发原理解析

    作为一名 Android 开发者,每天接触最多的就是 View 了.Android View 虽然不是四大组件,但其并不比四大组件的地位低.而 View 的核心知识点事件分发机制则是不少刚入门同学的拦 ...

  2. Android事件分发机制(上)

    Android事件分发机制这个问题不止一个人问过我,每次我的回答都显得模拟两可,是因为自己一直对这个没有很好的理解,趁现在比较闲对这个做一点总结 举个例子: 你当前有一个非常简单的项目,只有一个Act ...

  3. [转]Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    Android事件分发机制 该篇文章出处:http://blog.csdn.net/guolin_blog/article/details/9097463 其实我一直准备写一篇关于Android事件分 ...

  4. android事件分发(二)

    非常早之前写过一篇android事件分发的博客,主要写的是它是怎样分发的,具体非常多原理的东西都没有涉及到.今天就从源代码看android怎样控制它的分发机制. 鉴于手机屏幕的限制,所以android ...

  5. 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...

  6. 你真的看懂Android事件分发了吗?

    引子 Android事件分发其实是老生常谈了,但是说实话,我觉得很多人都只是懂其大概,模棱两可.本文的目的就是再次从源码层次梳理一下,重点放在ViewGroup的dispatchTouchEvent方 ...

  7. Android事件分发与责任链模式

    一.责任链模式 责任链模式是一种行为模式,为请求创建一个接收者的对象链.这样就避免,一个请求链接多个接收者的情况.进行外部解耦.类似于单向链表结构. 优点: 1. 降低耦合度.它将请求的发送者和接收者 ...

  8. Android进阶——Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent

    Android事件分发机制可以说是我们Android工程师面试题中的必考题,弄懂它的原理是我们避不开的任务,所以长痛不如短痛,花点时间干掉他,废话不多说,开车啦 Android事件分发机制的发生在Vi ...

  9. Android事件分发机制四:学了事件分发有什么用?

    " 学了事件分发,影响我CV大法吗?" " 影响我陪女朋友的时间" " ..... " 前言 Android事件分发机制已经来到第四篇了,在 ...

随机推荐

  1. html元素elem.style.top.left始终为空

    有如下元素: <div id="div1"   >div1</div> #div1{ width:100px; height:100px; position ...

  2. 爬虫实现(hpricot)

    1.基本代码 在gemfile中加入gem "hpricot",bundler install之后,在application.rb中require "hpricot&qu ...

  3. CentOS5.5上安装git

    1.尝试用yum安装git失败 [root@localhost usr]# yum install gitLoaded plugins: fastestmirrorLoading mirror spe ...

  4. poj 3694 Network(双连通分量)

    题目:http://poj.org/problem?id=3694 #include <iostream> #include <cstring> #include <cs ...

  5. Gen_event行为分析和实践

    1.简介 Gen_event实现了通用事件处理,通过其提供的标准接口方法以及回调函数,在OTP里面的事件处理模块是由一块通用的事件管理器和任意数量的事件处理器,并且这些事件处理器可以动态的添加和删除. ...

  6. 每天学点linux命令--tail,cut,sort,uniq

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  7. STM32之CAN ---CAN ID过滤器分析

      1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的.因此,发送者以广播的形式把报文发送给所有的接收者.节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该 ...

  8. bzoj 1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1095 [题意] 给定一棵树,树上颜色或白或黑而且可以更改,多个询问求最远黑点之间的距离 ...

  9. python包管理工具

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.本文将详细说明 安装 pip 的方法和 使用 pip 的一些基本操作如安装.更新和卸载 python ...

  10. 恒天云技术分享系列6 – vLan网络原理解析

    转载自恒天云官网:http://www.hengtianyun.com/download-show-id-15.html Vlan网络模式优点 增加网络可扩展性 网络隔离,每个租户拥有独立的网络及vl ...