为了账号安全,请及时绑定邮箱和手机立即绑定
  • Activity 事件分发

    https://img1.sycdn.imooc.com/652c50d10001a25024701304.jpg

    查看全部
    1. Activity 负责生命周期和处理事件。

    2. Window负责视图的控制。

    3. 一个Activity包含了一个Window, 一个Window才真正代表了一个窗口。

    4. Window包含了一个顶级的View -> DecorView

    5. Activity中setContentView的视图就是DecorView的子元素。

    6. 所有的事件都要经过DecorView才会传递给我们的View。

    7. 传递层级:Activity->Window->DecorView->ViewGroup->View

    8. 事件传递的三个主要对象:Activity、ViewGroup、View

    查看全部
    1. 事件序列:从手指按下屏幕开始,到手指离开屏幕所产生的一系列事件。

    2. 传递层级:Activity->Window->DecorView->ViewGroup->View

    查看全部
  • View 事件传递

    62bfabd500010f9b07200404.jpg
    查看全部
  • 熟记流程图、翻看源码

    查看全部
    0 采集 收起 来源:总结

    2022-05-03

  • 事件默认传递流程和在同一事件序列中的变化

    查看全部
  • 分别创建了MyActivity extends Activity,MyViewGroup extends FrameLayout,MyView extends View

    然后分别重写他们需要的方法dispatchTouchEvent、onTouchEvent,特别的是在ViewGroup中多重写一个onInterceptTouchEvent

    根据流程图,可以发现

    • 传递顺序Activity-ViewGroup-View

    • 由上自下的dispatvhTouchEventh互相传递后,到由下而上的onTouchEvent互相传递

    查看全部
  • 以上进入分发的过程。判断是否符合安全策略。符合安全策略-继续,是鼠标-结束不分发,

    注册了touchListener方法,里面的onTouch方法返回true标志着事件被消费了。

    查看全部
  • 如果不是取消事件并且没有被分发,继续分发处理。

    当前动作是按下、移动时,首先清空之前所有的触摸点信息。然后获取到可以接收的子view的集合

    从前到后遍历子view,尝试找到真正点击的view。

    用户没有定义了view的绘制顺序,返回当前下标。

    定义了的话,通过getChildDrawingOrder获取View的下标,需要重写这个方法。

    所以一般返回i。

    在view列表中拿出view,否则在children中拿出。

    查看全部
  • *** 看库或框架的源码时,需要的是捋清楚代码的思路,理解核心思想,而不是明白其中每一行代码的实现。



    接下来判断onInterceptTouchEvent方法的值

    发现一般情况下这个方法都会返回false,因为点击来源!=鼠标等等。

    查看全部
  • 第一个判断:这个值在View中可以找到,是个检测用的对象

    第二个判断:提供的辅助功能的选项,帮助有障碍的用户的使用,不影响方法调用

    接下来正式进入事件分发的逻辑代码中

    判断安全策略,

    查看全部
  • * dispatchTouchEvent  标志着事件进入到了ViewGroup里面。首先被调用到。

    * onInterceptTouchEvent  在过程中被调用。true=当前ViewGroup消费掉。false=传递下去。

    * onTouchEvent  ViewGroup没有onTouchEvent方法的实现,他是在View中实现的。

    应用场景:希望事件进行到ViewGroup终止,不传输到子View中,用户的触摸事件自行处理。

    处理:重写onInterceptTouchEvent并返回true,同时重写onTouchEvent方法,在其中编写事件处理逻辑即可。


    查看全部
  • 事件未被消费,当前视图都没能处理掉这个事件,才会去调用Activity的onTouchEvent方法,且他的返回值作为dispathchEvent的返回值。


    查看Activity中onTouchEvent方法的实现逻辑,发现其中一个的判断逻辑很重要,如果返回为true则会关闭当前界面且返回true。


    查看Window中shouldCloseOnTouch方法,当这三个bolean值均为true时返回true。


    * mCloseOnTouchOutside=true这个值表示当前Activity支持点击空白区域让acitvity消失。这个变量一般在downLoad的时候这个值才为true。

    * peekDecorView的实现在PhoneWindow,返回的是当前的dectorView。

    * isOutside =true 表示当前触摸的点击事件是在顶层View DoctorView之外的,没有点击到DoctorView里面。


    Activity整体传递流程比较线性,如果还是不清楚可以再回看源码及流程图消化吸收。

    查看全部
  • 查看源码,dispatchTouchEvent方法时发现:

    1、当action是按下的时候(也就是当事件刚开始的时候)会调用onUserInteraction方法,而内部并无具体实现——所以在事件刚开始时可以实现这个方法用于监听事件开始。

    2、当获取上层view的superDispatchTouchEvent方法返回是true的时候就消费掉这个事件,否则就传给onTouchEvent处理。(符合上一节说的流程)

    3、 Activity+Window+DecorView之间的关系:每个Activity都持有一个window对象,window本身是一个抽象类,有一个唯一的实现PhoneWindow,PhoneWindow持有了一个DecorView的实例,DecorView是Activity最顶层的View,他继承自FrameLayout。

    4、FrameLayout继承自ViewGroup,FrameLayout要实现的superDispatchTouchEvent方法在VIewGroup中实现了。

    查看全部

  • Activity中涉及到了两个方法,返回值均为true/false,根据父类dispathTouchEvent的返回走哪个方法。

    dispatchTouchEvent返回true,事件被消费,事件结束。

    onTouchEvent无论返回true/false,事件都结束。

    查看全部
  • 事件产生的时候会有这些类型,可以想象下手指在屏幕中的活动

    按下-移动-抬起,存在这样一个固定的规律,移动可以不存在

    安卓中存在的这样一个基本的层级关系和传递层级

    查看全部
  • 事件分发的定义和由来,及他的出现的机制的统筹定义

    查看全部
  • 事件分发流程

    查看全部
  • 事件在Activity的分发

    查看全部
  • 系统把事件封装为MotionEvent对象,事件分发的过程就是MotionEvent分发的过程。

    事件序列:从手指按下屏幕开始,到手指离开屏幕所产生的一系列事件。

    查看全部
  • 系统把事件封装为MotionEvent对象,事件分发的过程就是MotionEvent分发的过程。

    事件序列:从手指按下屏幕开始,到手指离开屏幕所产生的一系列事件。

    查看全部
  • 事件分发:用户通过屏幕与手机交互,每一次点击、长按、移动等都是一个事件

    事件分发机制:某一个事件从屏幕传递各个View,由View来使用这一事件(消费事件)或者忽略这一事件(不消费事件),这整个过程的控制。

    查看全部
  • Activity的事件分发流程图。

    dispatchtouchEvent(MotionEvent ev) 和 onTouchEvent(MotionEvent ev) 流程圖

    事件什么情况下被消费,什么情况下被传递

     

    http://img1.sycdn.imooc.com//61691e3b00012f8f09190423.jpg

    查看全部
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
学习此课程,需要有android的基础知识
老师告诉你能学到什么?
深克理解系统对于事件分发的流程,在今后的工作中加以应用,控制自如,让哪个控件接收事件,哪个控件屏蔽事件,对应回调哪个方法等,了然于胸

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!