android ViewGroup事件分发机制
1:事件分销过程
自定义一个LinearLayout,重写dispatchTouchEvent onInterceptTouchEvent onTouchEvent,定义一个按键重写dispathcTouchEvent setOnClickTouchEvent(会重写onTouchListener接口) onTouchEvent。
正常的事件分销途径是:ViewGroup先捕捉到事件,然后通过以下路径分销事件
DOWN事件:dispathcTouchEvent -> onIntercepterTouchEvent(不拦截子view事件) -> (view)dispatchTouchEvent -> setOnClickTouchEvent -> (view)OnTouchEvent
UP事件:(ViewGroup) dispathTouchEvent -> onInterceptTouchEvent -> dispathcTouchEvent -> setOnClickTouchEvent ->(view)OnTouchEvent
当按下按键如果移动会触发MOVE事件
当view完整捕捉到down up事件之后会触发SetOnClickListener接口。这就是点击事件。当ViewGroup捕捉到事件之后首先会触发dispatchTouchEvent 然后会判断是否拦截。
2:拦截
DOWN事件发生后,ViewGroup在onInterceptTouchEvent如果返回true(默认是false)那么View的MOVE UP都不会发生,事件分发的路径是:
(ViewGroup)dispatchTouchEvent -> onIterceptTouchEvent -> (ViewGroup)OnTouchEvent,事件最终被ViewGroup消费了。子View并没有捕捉任何事件。
3:反拦截
在View的dispathTouchEvent 中用getParent().requestDisallowInterceptTouchEvent(true)。
4:结论
1、如果ViewGroup找到处理事件的View,ViewGroup自己的onTouchEvent()不会被触发
2、通过onInterceptTouchEvent来拦截事件,子View通过getParent().requestDisalloInterceptTouchEvent(true)来阻止队MOVE UP事件的拦截。
备注:
requestDisallowInterceptEvent(true)失效
http://www.cnblogs.com/bhlsheji/p/5307724.html
android ViewGroup事件分发机制的更多相关文章
- Android View 事件分发机制 源码解析 (上)
一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个My ...
- Android之事件分发机制
本文主要包括以下内容 view的事件分发 viewGroup的事件分发 首先来看两张图 在执行touch事件时 首先执行dispatchTouchEvent方法,执行事件分发. 再执行onInterc ...
- android view事件分发机制
首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志 ...
- Android View 事件分发机制 源代码解析 (上)
一直想写事件分发机制的文章,无论咋样,也得自己研究下事件分发的源代码.写出心得~ 首先我们先写个简单的样例来測试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个M ...
- android的事件分发机制理解
android的事件分发机制理解 1.事件触发主要涉及到哪些层面的哪些函数(个人理解的顺序,可能在某一层会一次回调其它函数) activity中的dispatchTouchEvent .layout中 ...
- Android View框架总结(八)ViewGroup事件分发机制
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52298780 上篇分析了View的事件分发流程,留了一个问题:如果上 ...
- Android Touch事件分发机制学习
Android 事件分发机制 ViewGroup dispatchTouchEvent 返回true dispatchTouchEvent: Activity ACTION_DOWN Myrelat ...
- Android View 事件分发机制详解
想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题.要想搞明白原理就必须了解View的分发机制.在此之前我们先来了解一下以下三个非常重要的方法: di ...
- 浅谈Android View事件分发机制
引言 前面的文章介绍了View的基础知识和View的滑动,今天我们来介绍View的另一个核心知识,View的事件分发机制. 点击事件的传递规则 所谓的点击事件的分发机制,其实就是对MotionEven ...
随机推荐
- java中遍历集合的三种方式
第一种遍历集合的方式:将集合变为数组 package com.lw.List; import java.util.ArrayList; import java.util.List; import ja ...
- 64位win10系统无法安装.Net framework3.5的解决方法
前言 Win10不会自带安装.net framework 3.5,而很多软件必须基于.net framework 3.5 sp1(例如:Sql Server 2014),从官网上下载的.net fra ...
- js-方法
最近觉得自己的基础貌似太薄弱了,找了几本电子书,整理了一下基础的 方法: Concat:返回一个新数组 var a=['a','b','c']; var b=['x','y','z']; var c= ...
- tomcat access log 参数
%a - 客户端IP地址 %A - 本机IP地址 %b - 发送字节数,不含HTTP头 如果为空是 '-' %B - 同上 %h - 客户端机器名 (如果connector的enableLookup ...
- 浏览器网页判断手机是否安装IOS/Android客户端程序
IOS 原理如下: 为HTML页面中的超链接点击事件增加一个setTimeout方法. 如果在iPhone上面500ms内,本机有应用程序能解析这个协议并打开程序,则这个回调方法失效: 如果本机没有应 ...
- SignalR实时推送
SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现.在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 ...
- node与Elment以及子节点childrenNode与children的区别(2)
测试代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 关于qt的集成开发环境
事情是这样的,在archlinux中安装好qt5之后,只发现了一个 qt designer,这个只能用来写界面.其它的几个程序(qt assistant)算是查文档的这类辅助的程序. 记得在windo ...
- Delegate(委托与事件)
Delegate可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么.你只需要知道你将要引入的参数类型和输出类型是什么并定义它即可.这就是书本上所传达的方法签名必须相同的意思. 系统自 ...
- es5.0安装问题
ES的5.0版本听说在性能上大大优化,于是老大说准备换5.0版本.由于在技术群看到很多人都说ES 5.0 安装有问题,在这里贴出自己在使用最新版5.0遇到的问题和解决方法 1.Elasticsearc ...