Android事件分发原理
终于用上了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事件分发原理的更多相关文章
- Android View 的事件分发原理解析
作为一名 Android 开发者,每天接触最多的就是 View 了.Android View 虽然不是四大组件,但其并不比四大组件的地位低.而 View 的核心知识点事件分发机制则是不少刚入门同学的拦 ...
- Android事件分发机制(上)
Android事件分发机制这个问题不止一个人问过我,每次我的回答都显得模拟两可,是因为自己一直对这个没有很好的理解,趁现在比较闲对这个做一点总结 举个例子: 你当前有一个非常简单的项目,只有一个Act ...
- [转]Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
Android事件分发机制 该篇文章出处:http://blog.csdn.net/guolin_blog/article/details/9097463 其实我一直准备写一篇关于Android事件分 ...
- android事件分发(二)
非常早之前写过一篇android事件分发的博客,主要写的是它是怎样分发的,具体非常多原理的东西都没有涉及到.今天就从源代码看android怎样控制它的分发机制. 鉴于手机屏幕的限制,所以android ...
- 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结
前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...
- 你真的看懂Android事件分发了吗?
引子 Android事件分发其实是老生常谈了,但是说实话,我觉得很多人都只是懂其大概,模棱两可.本文的目的就是再次从源码层次梳理一下,重点放在ViewGroup的dispatchTouchEvent方 ...
- Android事件分发与责任链模式
一.责任链模式 责任链模式是一种行为模式,为请求创建一个接收者的对象链.这样就避免,一个请求链接多个接收者的情况.进行外部解耦.类似于单向链表结构. 优点: 1. 降低耦合度.它将请求的发送者和接收者 ...
- Android进阶——Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
Android事件分发机制可以说是我们Android工程师面试题中的必考题,弄懂它的原理是我们避不开的任务,所以长痛不如短痛,花点时间干掉他,废话不多说,开车啦 Android事件分发机制的发生在Vi ...
- Android事件分发机制四:学了事件分发有什么用?
" 学了事件分发,影响我CV大法吗?" " 影响我陪女朋友的时间" " ..... " 前言 Android事件分发机制已经来到第四篇了,在 ...
随机推荐
- PHP 如何阻止用户上传成人照片或者裸照
在这份教程中,我们将会学习到如何阻止用户通过PHP上传成人照片或者裸照. 示例 下载 我在phpclasses.org上面偶然发现一个很有用的,由Bakr Alsharif开发的可以帮助开发者基于 ...
- caffe简易上手指南(三)—— 使用模型进行fine tune
之前的教程我们说了如何使用caffe训练自己的模型,下面我们来说一下如何fine tune. 所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.fine tune相当于 ...
- 4418SPI2对应管脚位置
MCU_SPICLK2 MCU_SPITXD2 MCU_SPIFRM2 MCU_SPIRXD2
- 告诉你一个真实的OpenStack:都谁在用,用来干什么?
告诉你一个真实的OpenStack:都谁在用,用来干什么? OpenStack基金会近日发布的双年调查报告显示,开源云计算软件OpenStack正在进入主流企业市场,但该项目依然面临较难部署和管理的老 ...
- mssql查找备注(text,ntext)类型字段为空的方法
在sql语句中,如果查找某个文本字段值为空的,可以用select * from 表 where 字段='' ,但是如果这个字段数据类型是text或者ntext,那上面的sql语句就要出错了. 解决办法 ...
- 文件上传利器JQuery上传插件Uploadify
在做日常项目中,经常在后台需要上传图片等资源文件,之前使用过几次这个组件,感觉非常好用 ,但是每次使用的时候都是需要经过一番查阅,所以还不如记住在这里,以后使用的时候就翻翻. 他的官方网站如下:htt ...
- Webservice、WSDL三种服务访问的方式【转】
http://www.cnblogs.com/yongfeng/archive/2013/01/30/2883146.html 用soapUI试了下wsdl的测试,但还是不知道webService和W ...
- 文件I/O操作(2)
lseek函数原型为int lseek(int fd,int offset, int whence),fd为定位文件的描述符,offset为偏移量,如果是正数,则向文件末尾偏移,负数时,则向文件头偏移 ...
- 文件I/O操作(1)
linux系统调用和用户编程接口(api) 系统调用是指在操作系统提供给用户程序调用的一组“特殊”的接口,用户程序可以通过这组特殊的接口来获取操作系统内核提供的服务,例如用户可以通过进程控制相关的系统 ...
- FZU 2125 简单的等式
Problem Description 现在有一个等式如下:x^2+s(x,m)x-n=0.其中s(x,m)表示把x写成m进制时,每个位数相加的和.现在,在给定n,m的情况下,求出满足等式的最小的正整 ...