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 ...
随机推荐
- LeetCode Best Time to Buy and Sell Stock with Cooldown
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 题目: Say you hav ...
- awk 反过滤不想要的列 和循环列
[root@elk_m ~]# awk '{print $0}' install.log.syslog |head -1 <86>Feb 29 02:58:28 groupadd[1598 ...
- VMware workstaion上传虚拟机到VMware EXSI 5.5
1.首先在VMware Workstation 文件 --- 连接VMware EXSI5.5服务器. 2.输入VMware EXSI 5.5服务器地址.用户名和密码. 3.右键Windows 7 ...
- Aggregate
对序列应用累加器函数. /// <summary> /// 计算校验和,SUM /// </summary> public byte CalculateCheckSum(byt ...
- ios - loadView与viewDidload
从打印结果可以看出,先调用loadView再调用viewDidload 代码: // // ViewController.m // test // // Created by 裴波波 on 16/4/ ...
- C++中的explicit关键字
http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html 上面链接中的博主写的很好,我也不多说了.举得例子也很好,应该也是看了E ...
- s3c2440 test 里面的一些用法
#define REQ_INFO 0x60U U代表无符号,unsignchar
- JDBC的增删改写成一个方法,调用一个工具类
package com.hx.jdbc.connection; import java.sql.Connection; import java.sql.Statement; import com.my ...
- C#实现鸽巢排序
/// <summary> /// 鸽巢排序 /// 创建一个长度大于等于待排序数组array元素中最大值的标记数组mark, /// 将数组array中元素值个数映射到mark数组中. ...
- css3 flex
<!DOCTYPE html> <html> <head> <style> .first-face { display: flex; justify-c ...