事件分发核心 - 从dispatchTouchEvent开始... True if the event was handled by the view, false otherwise....事件分发核心 - 从dispatchTouchEvent开始... True if the event was handled by the view, false otherwise....视图位移调用链 dispatchTouchEvent()→ RefreshContentWrapper.canRefresh() → moveSpinnerInfinitely → moveSpinner...状态切换调用链 dispatchTouchEvent()→ RefreshContentWrapper.canRefresh() → moveSpinnerInfinitely → moveSpinner...视图位移调用链 dispatchTouchEvent()→ RefreshContentWrapper.canRefresh() → moveSpinnerInfinitely → moveSpinner
super.dispatchTouchEvent(ev); } } 这里,我们只是在dispatchTouchEvent 和 onTouchEvent 进行了打印 当我们触摸【a】的时候, 会得到打印...MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg EventButton ---- dispatchTouchEvent...Paste_Image.png 我们可以发现 先调用了 Activity的 dispatchTouchEvent 再调用 EventButton 的 dispatchTouchEvent 和...super.dispatchTouchEvent(ev); } } 这里,我们也只是在dispatchTouchEvent 和 onTouchEvent 进行了打印 当我们触摸【b】的时候,...Paste_Image.png 我们可以发现 先调用了 Activity的 dispatchTouchEvent 再调用 EventButton 的 dispatchTouchEvent 和
上节概述 ---- 1、在 Activity 中的事件都会按照先交由 Activity 中处理 dispatchTouchEvent 。...所以真正意义上的 dispatchTouchEvent 的过程即将真正开始。 查看上节文章View·从 InputEvent 到 dispatchTouchEvent 源码分析(二)。...俯瞰 dispatchTouchEvent 方法 ---- 先从整体的角度看下 dispatchTouchEvent 方法,它提供了: 对输入的 MotionEvent 事件的校对; 辅助相关功能; 事件分发...事件派发时 本章总结 1、由 Stage 调用 DecorView.dispatchTouchEvent 2、DecorView 继承 ViewGroup 且未覆写 dispatchTouchEvent...方法,所以交由 ViewGroup的dispatchTouchEvent 进行处理。
上节概述 从上节View·dispatchTouchEvent 源码分析(三)中,我们分析了 ACTION_DOWN 事件的派发和拦截过程。 接下去,我们分析后续的事件是怎么被处理的!...此处会涉及到dispatchTouchEvent()方法的继承关系,所以有必要弄清楚mView的继承链。...省略... } 6、首先关注下DecorView、FrameLayout是否覆写dispatchTouchEvent()方法,检查后发现并未覆写。...// (02) 如果child不是空,调用child的dispatchTouchEvent()。...下一章将会分析View在调用dispatchTouchEvent()时会影响哪些方法,并且这些影响的方法如何在实际工作中产生效用。
requestDisallowInterceptTouchEvent(MotionEvent)方法, 这样,可以放父View的 onInterceptTouchEvent(MotionEvent)失效 (当然,还有其他情况,现在暂时略) ---- dispatchTouchEvent...onInterceptTouchEvent ** public boolean onInterceptTouchEvent(MotionEvent ev) { return false; } 那我们来看看 dispatchTouchEvent...mGroupFlags 和很多方法有关,方法中和很多二进制的变量有关,并且这些二进制码都不太一样, 比较复杂,只能暂时放一下 FLAG_DISALLOW_INTERCEPT 就比较简单点, 只和 dispatchTouchEvent...resetTouchState(), requestDisallowInterceptTouchEvent 这3个方法有关 (先忽略resetTouchState()这个方法,也就是上面说的别的情况, dispatchTouchEvent...boolean值,再如果有 父View,修改父View的 mGroupFlags 值 如果为true,则会执行后面的方法,修改 父View对应的 mGroupFlags 值 ---- 最后,我们回到 上面贴的 dispatchTouchEvent
到对应的View 这个时候,就消费掉了, 不会回传 如果我们点击一个ViewGroup,会dispatchTouchEvent到对应的ViewGroup 这个时候,不会被消费,会回传 那么,会不会有点击一个...----> noMsg EventViewGroup ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg MainActivity...Paste_Image.png 点击 自定义的TouchEventChilds 可以发现对应的过程 MainActivity ---- dispatchTouchEvent ---->...ACTION_DOWN ----> noMsg TouchEventFather ---- dispatchTouchEvent ----> ACTION_DOWN ---->...----> ACTION_DOWN ----> noMsg TouchEventFather ---- dispatchTouchEvent ----> ACTION_DOWN
Paste_Image.png 点击后,我们来看一下对应的打印信息 如果没有滑动 MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN...----> noMsg EventButton ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg EventButton...---- onTouchEvent ----> ACTION_DOWN ----> noMsg MainActivity ---- dispatchTouchEvent...----> ACTION_UP ----> noMsg EventButton ---- dispatchTouchEvent ----> ACTION_UP ---->...----> ACTION_DOWN ----> noMsg EventButton ---- dispatchTouchEvent ----> ACTION_DOWN ---->
(MotionEvent ev) { TouchEventUtil.logActionMsg(getClass(),"dispatchTouchEvent",ev); return...super.dispatchTouchEvent(ev); } } EventViewGroup package com.aohuan.test.dodoevent.view; import...super.dispatchTouchEvent(ev); } } TouchEventFather: package com.aohuan.test.dodoevent.view; import...super.dispatchTouchEvent(ev); // return true; } @Override public boolean onTouchEvent...super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) {
Paste_Image.png ---- 前言 前面用到了 dispatchTouchEvent 和 onTouchEvent 分别表示 分发事件 和 触摸消费的事件 我们可以发现, Activity...(MotionEvent ev) { TouchEventUtil.logActionMsg(getClass(),"dispatchTouchEvent",ev); return...super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) {...Paste_Image.png 点击【2】 MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg...Paste_Image.png 点击【3】 MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
上一篇,我们大体理解了分发的过程 理解了在 dispatchTouchEvent 和 onTouchEvent 的过程中 对应的顺序 还有 View 和 ViewGroup 的区别 具体代码可以见https...Paste_Image.png 点击 自定义的EventButton 可以发现对应的过程 MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN...----> noMsg EventButton ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg MainActivity...Paste_Image.png 点击 自定义ViewGroup的 EventViewGroup 后 可以发现 MainActivity ---- dispatchTouchEvent -...---> ACTION_DOWN ----> noMsg EventViewGroup ---- dispatchTouchEvent ----> ACTION_DOWN ----
cb.dispatchTouchEvent(ev) : super.dispatchTouchEvent(ev); } 当有 cb 对象时即可传递给 cb 对象去处理,否则交给 view 去处理...所以首次的dispatchTouchEvent 事件交给 Activity 去处理。...而 superDispatchTouchEvent 的方法就是 ViewGroup 的 dispatchTouchEvent 方法。...// Activity.java public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() ==.../article/details/12517911 [Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()]:http
上一篇,简单叙述了一下对应的想法 这篇也只是选读,没有太多实在意义,只是叙述一下对应的解决过程 这里简单录制gif,好理解一点
方法事件传递机制 2、Activity.onTouchEvent 方法事件传递机制 三、ViewGroup 的事件传递 1、ViewGroup.dispatchTouchEvent 方法事件传递机制...(MotionEvent ev) { return super.dispatchTouchEvent(ev); } @Override public boolean...(MotionEvent event) { return super.dispatchTouchEvent(event); } @Override public...事件来源 : ① 布局容器 ViewGroup 的 dispatchTouchEvent 方法返回 false ; ② 布局容器 ViewGroup 的 onTouchEvent 方法返回 false.../** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 本类的 dispatchTouchEvent 方法返回 super.dispatchTouchEvent
文章目录 1、activity中dispatchTouchEvent()和onTouchEvent() 2、ViewGroupA中重写dispatchTouchEvent 、onInterceptTouchEvent...、onTouchEvent 3、ViewGroupB中重写dispatchTouchEvent 、onInterceptTouchEvent 、onTouchEvent 4、MyView中重写dispatchTouchEvent...()返回ture 12、类似11,ViewGroupA 的 dispatchTouchEvent()返回ture 13、类似11,ViewGroupA 的 dispatchTouchEvent()中的action_down...dispatchTouchEvent I/_tag: Activity dispatchTouchEvent I/_tag: ViewGroupA dispatchTouchEvent I...dispatchTouchEvent I/_tag: ViewGroupA dispatchTouchEvent I/_tag: Activity dispatchTouchEvent I
(MotionEvent ev) { Log.e(TAG,"MainActivity:dispatchTouchEvent"); return super.dispatchTouchEvent...(MotionEvent ev) { Log.e(TAG,"MyViewGroup:dispatchTouchEvent"); return super.dispatchTouchEvent...(MotionEvent event) { Log.e(TAG,"MyView:dispatchTouchEvent"); return super.dispatchTouchEvent...—> MyViewGroup:dispatchTouchEvent —>MyViewGroup : onInterceptTouchEvent—> MyView:dispatchTouchEvent...(MotionEvent event) { Log.e(TAG,"MyView:dispatchTouchEvent"); return super.dispatchTouchEvent
:返回:true Log:-CustomView:dispatchTouchEvent:返回:true Log:-VP2:dispatchTouchEvent:返回:true Log:-VP1:dispatchTouchEvent...:返回:true Log:-Activity:dispatchTouchEvent:返回:true Up事件 Log:-Activity:dispatchTouchEvent:调用 Log:-VP1:dispatchTouchEvent...:返回:true Log:-VP2:dispatchTouchEvent:返回:true Log:-VP1:dispatchTouchEvent:返回:true Log:-Activity:dispatchTouchEvent...Log:-Activity:dispatchTouchEvent:返回:false 4、VP2拦截消费 Down事件 Log:-Activity:dispatchTouchEvent:调用 Log:-...:返回:true Log:-Activity:dispatchTouchEvent:返回:true UP事件 Log:-Activity:dispatchTouchEvent:调用 Log:-VP1:dispatchTouchEvent
( 1955): MainActivity->dispatchTouchEvent ( 1955): MyViewGroup1-->dispatchTouchEvent ( 1955): MyViewGroup1...然后看默认情况下的log: ( 1955): MainActivity->dispatchTouchEvent ( 1955): MyViewGroup1-->dispatchTouchEvent (...过程必然是这样 View.dispatchTouchEvent() 返回 true -> ViewGroup2.dispatchTouchEvent() 返回 true -> ViewGroup1....dispatchTouchEvent() 返回 true -> Activity得到ViewGroup1.dispatchTouchEvent() 返回 true后就是上面分析的源码流程了。...View的dispatchTouchEvent()逻辑。
(event); } 在里面调用了父类FrameLayout的dispatchTouchEvent()方法,而FrameLayout中并没有dispatchTouchEvent...()方法 if (child.dispatchTouchEvent(ev)) { // 如果child.dispatchTouchEvent(ev)返回true表示 //该事件被消费了...()方法,LinearLayout也没有dispatchTouchEvent()这个方法,所以也是调用ViewGroup的dispatchTouchEvent()方法,所以这个方法卡在51行没有继续下去...,就是RelativeLayout,FrameLayout的dispatchTouchEvent()继续卡在51行,先执行RelativeLayout的dispatchTouchEvent()方法 执行...的dispatchTouchEvent(), TextView并没有dispatchTouchEvent()这个方法,于是找TextView的父类View,在看View的dispatchTouchEvent
---onInterceptTouchEvent---onTouchEvent 点击:ViewGroup1(最外层) I/System.out: MainActivity dispatchTouchEvent...I/System.out: ViewGroup1 dispatchTouchEvent ViewGroup1 onInterceptTouchEvent I/System.out...ViewGroup1 dispatchTouchEvent ViewGroup1 onInterceptTouchEvent ViewGroup2...dispatchTouchEvent ViewGroup1 onInterceptTouchEvent ViewGroup2 dispatchTouchEvent...点击View.png ---- 苹果树上掉下(分发:dispatchTouchEvent false)个苹果(event),爷爷(ViewGroup1)拿到。
特别注意,如果在这一步的dispatchTouchEvent中没有调用super.dispatchTouchEvent(event),那么事件就到此为止,被终结了。...只要在dispatchTouchEvent中调用了super.dispatchTouchEvent(event)那么,事件(event)会被交给onInterceptTouchEvent去处理。...再次强调,dispatchTouchEvent只决定处理什么,并不能指定谁来调用。...现在,将super.dispatchTouchEvent(event)的注释去掉,注意,现在的boolean dispatchTouchEvent(MotionEvent event)变成下面这样: 01...+ "dispatchTouchEvent:", "ACTION_UP"); 09 } super.dispatchTouchEvent