Android事件分发小结
boolean dispatchTouchEvent()
{
// Window::superDispatchTouchEvent(MotionEvent ev)方法由系统实现
// 该方法个人感觉存在于PhoneWindow.java类中, 但是文章中没有写的很清楚. 甚至我觉得是有误导... 需要再斟酌.
// 个人猜测该方法主要用于获取xml文件解析出来的View, 通过区分ViewGroup和普通View, 再执行对应的按键分发逻辑.
if (getWindow().superDispatchTouchEvent(MotionEvent::ev))
{
// 这里表明, 如果dispatchTouchEvent函数返回true, 则表示子类消费过触摸事件
// 如果子类没有消费过触摸事件, 则执行onTouchEvent()方法
return true ;
}
else
{
return onTouchEvent(MotionEvent::ev) ;
}
}
// Activity会先将触摸事件下发到视图控件中
// 触摸事件的入口为dispatchTouchEvent()函数
Window::superDispatchTouchEvent(MotionEvent ev)
{
// View处理触摸事件的入口, 也是唯一的入口(个人怎么理解的, 不保证正确性)
// 其实这里也应该有个遍历, 如果是ViewGroup, 需要先探测所有自孩子的处理结果.
public boolean dispatchTouchEvent(MotionEvent ev)
{
// 对于ViewGroup, 需要先查看是否拦截当前触摸事件,
if (this instanceof ViewGroup)
{
if (!onInterceptTouchEvent())
{
for (int i = 0 ; i < getChildCount() ; i++)
{
if (getChildAt(i).dispatchTouchEvent())
{
return true ;
}
}
}
} // 这里说明触摸事件监听优先于onTouchEvent并且可以拦截按键分发链条, 从而阻止onTouchEvent函数的执行
if (null != mTouchListener && mTouchListener.onTouch(MotionEvent::ev))
{
return true ;
} if (onTouchEvent(MotionEvent::ev))
{
return true ;
} return false ;
}
} public boolean View::onTouchEvent(MotionEvent ev)
{
if (ev.getAction() == MotionEvent.ACTION_UP)
{
….
return performClick() ;// 该处为猜测
}
} public boolean View::performClick()
{
if (null != onClickListener)
{
return true ;
} return false ;
}
- 事件分发的起始点是Activity::dispatchTouchEvent(MotionEvent ev);
- dispatchTouchEvent(MotionEvent ev)将事件处理传递给onTouchListener和onTouchEvent()方法, 都返回false表示没有消费
- 如果是ViewGroup在dispatchTouchEvent()执行消费逻辑前, 需要递归调用子孩子的dispatchTouchEvent()方法查看子孩子是否消费该事件
- onTouchEvent()方法中通过performClick()方法执行了onClickListner的onClick事件
Android事件分发小结的更多相关文章
- Android事件分发机制源码分析
Android事件分发机制源码分析 Android事件分发机制源码分析 Part1事件来源以及传递顺序 Activity分发事件源码 PhoneWindow分发事件源码 小结 Part2ViewGro ...
- Android事件分发机制具体解释
转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52416141 1. 概述 Android日常研发时,与View接触占领相当多的时间.而 ...
- Android 事件分发机制具体解释
很多其它内容请參照我的个人网站: http://stackvoid.com/ 网上非常多关于Android事件分发机制的解释,大多数描写叙述的都不够清晰,没有吧来龙去脉搞清晰,本文将带你从Touch事 ...
- Android事件分发机制二:viewGroup与view对事件的处理
前言 很高兴遇见你~ 在上一篇文章 Android事件分发机制一:事件是如何到达activity的? 中,我们讨论了触摸信息从屏幕产生到发送给具体 的view处理的整体流程,这里先来简单回顾一下: 触 ...
- Android事件分发机制浅谈(一)
---恢复内容开始--- 一.是什么 我们首先要了解什么是事件分发,通俗的讲就是,当一个触摸事件发生的时候,从一个窗口到一个视图,再到一个视图,直至被消费的过程. 二.做什么 在深入学习android ...
- 通俗理解Android事件分发与消费机制
深入:Android Touch事件传递机制全面解析(从WMS到View树) 通俗理解Android事件分发与消费机制 说起Android滑动冲突,是个很常见的场景,比如SliddingMenu与Li ...
- Android事件分发机制(下)
这篇文章继续讨论Android事件分发机制,首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子 ...
- Android事件分发机制(上)
Android事件分发机制这个问题不止一个人问过我,每次我的回答都显得模拟两可,是因为自己一直对这个没有很好的理解,趁现在比较闲对这个做一点总结 举个例子: 你当前有一个非常简单的项目,只有一个Act ...
- android事件分发机制
android事件分发机制,给控件设置ontouch监听事件,当ontouch返回true时,他就不会走onTouchEvent方法,要想走onTouchEvent方法只需要返回ontouch返回fa ...
随机推荐
- JSP复习整理(二)基本语法
最基础的整理.. 一.语句声明 <%@ page language="java" contentType="text/html; charset=UTF-8&quo ...
- SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别
1.先创建两个临时表,并插入数据 CREATE TABLE #TEMP1( ID INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50)) CREATE TA ...
- 【纯css】响应式图片列表
示例演示 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- 从源代码剖析Mahout推荐引擎
转载自:http://blog.fens.me/mahout-recommend-engine/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pi ...
- 第一次使用UML的感觉
刚开始接触的时候,其实我内心是拒绝的,因为感觉这种软件之前接触过,觉得就是相当于思维导图那种的. 可当自己使用的时候,觉得大纲总体上是类似是规划方向的,可是细节却让人深思,用什么图标,特别是用什么线, ...
- 剑指Offer-【面试题02:实现Singleton 模式——七种实现方式】
题目:设计一个类,我们只能生成该类的一个实例 package com.cxz.demo02; /** * Created by CXZ on 2016/9/13. */ public class Si ...
- Oracle 11203 + ASM安装 for HP UX
一,安装前准备 1.创建所需组和用户 /usr/sbin/groupadd -g 1000 oinstall/usr/sbin/groupadd -g 1020 asmadmin/usr/sbin/g ...
- jsp include flush true
设置flush为true,就是说,如果你的缓冲区的内容很多了,就将数据读出,以免数据泄漏,造成错误服务器端页面缓冲,大致的意思是,在将生成的HTML代码送到客户端前,先在服务器端内存中保留,因为解释J ...
- mysql 中的LIMIT用法
select * from table_name LIMIT 起始偏移量,数量 (1)起始偏移量为0:代表没有偏移,即从第1行开始. (2)数量为-1:代表是无穷,即偏移量之后所有的行. (3)LIM ...
- android textView 总是有paddingtop怎么解决
android的TextView即使设置wrap_content,如果打开开发者模式->显示布局边界,能看到textView还是存在paddingTop, 解决方法: android:inclu ...