首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android下的Touch事件分发详解

本文将详细介绍 Android 下的 Touch 事件分发机制,包括事件分发的过程、涉及的方法以及 ViewGroup 中事件分发的实现。...具体来说,当一个触摸事件产生时,首先会传递给 Activity 的 dispatchTouchEvent 方法,然后由 Activity 将事件传递给 Window,最后由 Window 将事件传递给顶层的...在 View 层级结构中,事件会从上到下(父 View 到子 View)进行传递,直到有一个 View 能够处理这个事件为止。...当 Touch 事件发生时,Activity 的 dispatchTouchEvent(MotionEvent ev)方法会以隧道方式将事件传递给最外层 View 的 dispatchTouchEvent...当 Touch 事件发生时,事件首先传递给最外层的 Activity,然后通过dispatchTouchEvent方法沿着视图层次结构逐级向内传递给子视图。

35310

Android监听自身卸载,弹出用户反馈调查

这篇博客,我将讲述一下一个各大应用中很常见的一个功能,同样也是基于JNI开发的Android应用小Demo,看完这个之后,不仅可以加深对NDK开发的理解,而且该Demo也可以使用在实际的开发中。...-d tel:10086 打开一个网页 命令:am start -a android.intent.action.VIEW -d  网址 示例:am start -a android.intent.action.VIEW...execlp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名, 找到后便执行该文件, 然后将第二个以后的参数当做该文件的argv[0], argv[1], ..., 最后一个参数必须用空指针..."android.intent.action.VIEW","-d","http://shouji.360.cn/web/uninstall/uninstall.html",(char*)NULL);...,在Android4.2之前的版本这些参数是没有必要的,所以我们在编写C代码的时候需要区别Android系统版本,分别执行相应的am命令,关于获取Android系统版本可以在Java层实现,然后将其作为参数传递给

3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android开发艺术笔记 | View的事件分发机制原理详析与源码分析(ing)

    因此同一个事件序列中的事件不能分别由两个View同时处理!!! 除非, 将本该由某个View自己处理的事件 通过onTouchEvent强行传递给其他View处理。...并且事件将重新交由它的父元素去处理, 即父元素的onTouchEvent会被调用。【事件向上“回传”】 即, 事件一旦交给一个View处理,那么它就必须消耗掉!!!...return onTouchEvent(ev); 接下来看Window是如何将事件传递给ViewGroup的; Window是个抽象类!!!...... ---- 参考: 《Android开发艺术探索》 《Android群英传》 Android事件分发机制详解(源码)!!!...事件拦截机制大概流程(Android群英传) 要点提炼|开发艺术之View ?

    99930

    Android面试官必问的事件分发,你答得上来吗?

    相应如果不想 ViewGroup 拦截事件,可以调用 ViewGroup 的 requestDisallowInterceptTouchEvent方法,传 true 就是禁止拦截,false 你开心就拦吧...; } else { // 如果 onInterceptTouchEvent() 返回 false 则代表当前 View 不拦截事件 // 则该事件则会继续传递给它的子元素...在消费掉 Down 事件后,后续的事件都给会传递给它,你知道是怎么实现的吗 :具体怎么实现没关注 面试官:好的,回去等通知吧。...Down 事件后,后续的事件都会传递给它,你知道是怎么实现的吗 ️:ViewGroup 里面用了一个成员变量 mFirstTouchTarget 来保存消费事件的子 View 信息,因为安卓是支持多指操作的...//调用 dispatchTransformedTouchEvent 方法将事件分发给子 View if (dispatchTransformedTouchEvent(ev, false

    1.1K00

    Art of Android Development Reading Notes 3

    《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系 本节和《Android群英传》中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View...(7)Scroller分析:详细内容可以参见《Android群英传》读书笔记 (2) 第五章 Scroll分析 3.2 View的滑动 (1)常见的实现view的滑动的方式有三种: 第一种是通过view...以上三种方法的详情可以参考阅读《Android群英传》读书笔记 (2)中的内容,此处不再细述。...如果事件能够传递给当前view,那么此方法一定会被调用,返回结果受当前view的onTouchEvent和下级view的dispatchTouchEvent方法的影响,表示是否消耗当前事件。...(5)某个view一旦开始处理事件,如果它不消耗ACTION_DOWN事件,那么同一事件序列的其他事件都不会再交给它来处理,并且事件将重新交给它的父容器去处理(调用父容器的onTouchEvent方法)

    43810

    轻量级控件SnackBar使用以及源码分析

    duration); return snackbar; } 里面有一个findSuitableParent方法,Snackbar内部把view传递给了这个方法,查看该方法的逻辑 private...时候,也将view进行返回,大家都知道R.id.content就是decorView下的content部分,否则就会将这个view赋值给fallback,这个fallback就是一个viewGroup。...(View) parent : null; } 取出view的Parent并且只要这个parent是View,就将其赋值给我门的view,到这里我们明白了,这个死循环就是为了无限的从传进来的这个...attachToRoot) { root.addView(temp, params); } 我们跟踪mView这个变量...通过isCurrentSnackbar(callback)方法判断传入show方法的callback是否在队列之中,其中有一个SnackbarRecord类型的变量mCurrentSnackbar用于记录时间

    1.4K20

    带你一起探究Android事件分发机制, 让面试提问不在畏惧!

    Android将触摸事件统一封装成MontionEvent类,以Down事件开始,Up事件结束,中间可能会产生其实事件(例如Move),组成一个完整的事件系列。...接下来再找到符合条件的子View,把事件传递给他。 如果小明终无后人,则传家宝到小明手上后就断了传承,自己连传和不传的选择都没有,只能自己想办法给处理了。...遍历子View,将事件传递给符合条件的View。...随后直接从mFirstTouchTarget表头找到之前消费Down事件的子Viwe,将事件传递给它。...ViewGroup有传递事件的使命,子View符合可见和在事件坐标上,则传。 没有符合条件的子View和传递给子View不消费,将自己处理。以后事件子View想都不要想。

    1.4K10

    Android消息处理学习笔记(一)

    Android事件分发机制 一、主要函数事件分发设计的几个函数:public boolean dispatchTouchEvent(MotionEvent ev)public boolean onInterceptTouchEvent...的集合)3、View三者之间的关系:事件传递过程:Activity =》ViewGroup =》ViewdispatchTouchEvent返回值三种返回值:return super.onTouchEvent...函数返回true拦截消息,ACTION_DOWN消息都会被消费掉,即停止传递,正常流程下的后续节点都不会收到消息;当dispatchTouchEvent返回fasle时,首先拦截消息向子控件中传递,然后将消息传递给父控件的...onTouchEvent函数中继续回传。...dispatchTouchEvent函数和OnTouchEvent函数返回true,消息直接拦截,后续组件不会收到消息2、若在onInterceptTouchEvent函数拦截消息,只会改变消息的走向,将消息传递给自己的

    6910

    Carson带你学Android:手把手带你深入分析事件分发机制!

    的事件分发有了感性的认知 下面,我将详细介绍Android事件分发机制 2....View 即要想充分理解Android分发机制,本质上是要理解: Activity对点击事件的分发机制 ViewGroup对点击事件的分发机制 View对点击事件的分发机制 下面,我将通过源码,...B 和 Activity A的onTouchEvent(); 该事件列的其他事件(Move、Up)也将传递给View C的onTouchEvent() 会逐层往dispatchTouchEvent...事件,该MOVE事件才会直接传递给ViewGroup B 的onTouchEvent() 后续事件将直接传递给ViewGroup B 的onTouchEvent()处理,而不会再传递给ViewGroup...Layout过程 - 最易懂的自定义View原理系列(3) 自定义View Draw过程- 最易懂的自定义View原理系列(4) 接下来我将继续介绍与Android事件分发最相关的知识:自定义View

    81510

    Fragment与Activity之间的数据交互

    1概念 1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常。...2 参考链接 Activity和Fragment传递数据的两种方式 【Fragment精深系列4】Fragment与Activity之间的数据交互 2 Activity把值传递给Fragment 2.1...,android.R.anim.fade_out); fragment1 = MyFragment.newInstance("这是第一个fragment");//这里只需要直接调用这个方法,就创建了一个...Bundle bundle = getArguments();         String data = bundle.getString("DATA");     } 3 Fragment把值传递给...Activity 3.1 步骤 (1)在fragment中定义一个内部回调接口,再让包含该fragment的activity实现该回调接口,这样fragment即可调用该回调方法将数据传给activity

    8410

    Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制

    前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等 今天,我将全面总结...即:Activity、ViewGroup、View 的事件分发机制 * * * 4. 总结 在本章节中,将采用大量的图表从各个角度对Android事件分发机制进行总结。...B 和 Activity A的onTouchEvent(); 该事件列的其他事件(Move、Up)也将传递给View C的onTouchEvent() [image.png] 会逐层往dispatchTouchEvent...Activity A的onTouchEvent()) 该事件列的其他事件(Move、Up)将直接传递给ViewGroup B的onTouchEvent() 注:该事件列的其他事件(Move、Up)将不会再传递给...onTouchEvent() 后续又来了一个MOVE事件,该MOVE事件才会直接传递给ViewGroup B 的onTouchEvent() 后续事件将直接传递给ViewGroup B 的onTouchEvent

    66130

    手把手教你读懂源码,View的Touch事件传递流程详细剖析

    返回为true的话则表示拦截事件,事件不在向子View中分发,若返回false的话,则表示不拦截事件,将继续分发事件。...方法中child为null的情况;如果之前的ACTION_DOWN事件被子View消费掉了,就会直接找到该子View对应的Target,将ACTION_MOVE和ACTION_UP事件传递给它们。...如果事件从上往下一直传递到最底层的子View,但是该View并没有消费该事件,那么该事件就会反序往上传递,即从该View传递给自己的ViewGroup,然后再传给更上层的ViewGroup直至传递给Activity.onTouchEvent...ViewGroup中的onTouchEvent()方法,不会再往下传递给子View。...Android事件分发机制简图 如果子View之前在处理某个事件,但是后续被ViewGroup拦截,那么子View会接收到ACTION_CANCEL。

    92570

    笔记——事件分发机制(四)

    传递和分发,同时开始往父控件回溯(同时回溯后父控件的onTouchEvent开始从下往上回传直到某个onTouchEvent return true消费事件而停止),事件分发机制就像递归,return...View将本该自己处理的事件通过onTouchEvent强行传递给其他View处理。...(5)如果View不消耗除ACTION_DOWN以外的其他事件,那么这个点击事件会消失,此时父元素的onTouchEvent并不会被调用,并且当前View可以持续收到后续的事件,最终这些消失的点击事件会传递给...(7)View没有onInterceptTouchEvent方法,一旦有点击事件传递给它,那么它的onTouchEvent方法就会被调用。...另外,setOnClickListener会自动将View的CLICKABLE设为true,setOnLongClickListener则会自动将View的LONG_CLICKABLE设为true,这一点从源码中可以看出来

    82740
    领券