android 触摸touch事件的派送和传递

1、touch事件从Activity开始向下逐层派发

一直派发到焦点控件进行处理

2、如果控件的事件处理方法返回true

则,该控件消费且持续关注此事件

否则,该事件向该控件的上一层容器传递

3、控件的touch监听器的onTouch方法 先于

控件本身的onTouchEvent执行

Touch事件派发和处理的方法

dispatchTouchEvent

onInterceptTouchEvent(只有ViewGroup有该拦截方法)

onTouchListener.onTouch

onTouchEvent

假设一个Activity只包含一个Linearlayout,这个LinearLayout又包含一个TextView。从Log中可以看出

当用户按下这个TextView时,所执行的函数顺序是:

Activity.dispatchTouchEvent

Linearlayout.dispatchTouchEvent

LinearLayout.onInterceptTouchEvent(LinearLayout是ViewGroup)

TextView.dispatchTouchEvent

TextView.onTouchListener.onTouch

TextView.onTouchEvent

LinearLayout.onTouchListener.onTouch

LinearLayout.onTouchEvent

最后是Activity.onTouchEvent

以上是每一层都不消费这个touch事件的情况,即所有方法都return false的情况。

如果任意一个方法消费了这个事件,即返回了true,这种情况下事件只到此方法为止,后面的方法都不执行。而后续事件将也只执行到此方法,即此方法消费并持续关注此事件,如:移动和抬起等后续事件。

时间: 2024-07-31 14:35:07

android 触摸touch事件的派送和传递的相关文章

Android 简述touch事件中的MotionEvent

有关touchEvent的事件里都有一个 MotionEvent 参数,下面来简单介绍一下它的属性的一些含义和使用的方法 通常单指操作时,一般如下: switch (event.getAction()) {//第一个触摸点 case MotionEvent.ACTION_DOWN: //按下 = 0 <span style="white-space:pre"> float x = event.getX();</span> break; case MotionEv

Qt for android触摸手势事件QGestureEvent

在触摸设备上可以使用Qt的手势事件 要激活手势事件,需要执行以下操作: 第一步,为QWidget控件注册手势事件 QList<Qt::GestureType> gestures; gestures << Qt::PanGesture; gestures << Qt::PinchGesture; gestures << Qt::SwipeGesture; gestures << Qt::TapGesture; gestures << Q

Android中Touch事件传递总结

TouchEvent TouchEvent 分三种事件:down.move.up. 其中move事件在一个操作中(这里说的一个操作就是用户与屏幕的交互,即由down到up的动作序列)可能会发生多次. 但是,我们认为一个动作序列会包含以上三种事件,因此,在事件处理中就是要处理好这个过程,而最重要的就是down事件,这是一个动作序列的起始,没有down谈不上后面的事件了. 所以,我们把消耗down事件的类当做是这个动作序列的最终载体. 如果Down事件不归你处理,那这个动作序列的move,up也不归

Android中Touch事件的传递机制

由于之前对于android的事件传递机制不了解,今天正好不忙,赶紧抽出时间来理一下这方面的知识,本文结合demo,对android的事件传递机制进行分析. 在事件传递过程中,离不开以下三个方法: 1.dispatchTouchEvent 分发touchEvent,返回值为true时表示TouchEvent被当前View处理,事件不会向下层传递(包括后续的onInterceptTouchEvent和onTouchEvent), dispatchTouchEvent会收到后续的ACTION_MOVE

Android的Touch事件分发机制简单探析

前言 Android中关于触摸事件的分发传递是一个很值得研究的东西.曾不见你引入了一个ListView的滑动功能,ListView就不听你手指的指唤来滚动了:也不知道为啥Button设置了onClick和onTouch,其中谁会先响应:或许你会问onTouch和onTouchEvent有什么区别,又该如何使用?这里一切的一切,只要你了解了事件分发机制,你会发现,解释这都不是事儿! 相关Touch事件的方法 1.public boolean dispatchTouchEvent(MotionEve

手机触摸touch事件

1.Touch事件简介 pc上的web页面鼠 标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如 iphone.ipod Touch.ipad上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel 事件,分别对应了触屏开始.拖拽及完成触屏事件和取消. 当按下手指时,触发ontouchstart: 当移动手指时,触发ontouchmov

Android Touch事件传递机制全面解析(从WMS到View树)

转眼间近一年没更新博客了,工作一忙起来.非常难有时间来写博客了,因为如今也在从事Android开发相关的工作,因此以后的博文也会很多其它地专注于这一块. 这篇文章准备从源代码层面为大家带来Touch事件的传递机制.我这里分析的源代码时Android4.4的. 说到分析源代码,光看肯定是不行的,一定要亲自去跟,而且要边跟边思考,所以在下一篇中.会有一个Demo来为大家详细分析源代码的走向. 以下进入正题,先来看下Android中事件的分类: 1.键盘事件:主要是指按下虚拟键盘的某个按键.或者机身的

android自定义控件系列教程-----touch事件的传递

前沿: 很久没有写过博客了,因为工作的原因很少有时间写东西了,最近想写一个UI系列的博客,因为我发现这一系列的都很少,而且没有那么系统,这里我想以我自己的观点来阐述一下如何自定义android 控件系列. 自定义控件阐述: 在我的理解里面自定义控件,需要了解到touch事件的传递.分发.拦截机制,Scroller类的运用,andorid 视图的理解,ViewGroup的熟悉,因为我们绝大多的控件都是继承自ViewGroup,还有就是要学会布局测量等. Touch事件的传递 首先我们要了解在and

android中的事件传递和处理机制

一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己能掌握这块知识.好了,下面是我今天的收获,希望也 能对你有一点帮助. 一.拟人化来理解android中的事件机制 其实android中的事件传递与处理机制跟我们生活中的事件处理是一样的.这里有一个生活中的例子,很能说明这个问题.阐述如下: 你是一个公司的员工,你的上头有一个主管,主管上头呢还有一个经