为了账号安全,请及时绑定邮箱和手机立即绑定
  • 每个Activity持有Window窗体,而Window是个抽象类,其唯一的实现类是PhoneWindow,所以Window的

    superDispatchTouchEvent

    方法就是调用PhoneWindow的DispatcherToucherEvent方法,,实现的调用DecorView的 SuperDispatcherToucherEvent方法(PhoneWindow持有DecorView)。DecorView继承自FrameLayout(内部没有实现SuperDispatcherToucherEvent方法),FrameLayout继承自ViewGroup(实现SuperDispatcherToucherEvent方法)。

    public boolean superDispatchTouchEvent(MotionEvent event) {
        return mDecor.superDispatchTouchEvent(event);
    }

    查看全部
  • ACTIon_DOWN按下

     ACTIon_MOVE移动

     ACTIon_up 离开

    action_cancel 取消


    查看全部
  • Activity 事件分发

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

    查看全部
  • Activity

    1. dispatchTouchEvent(MotionEvent ev) 事件分发

    2. onTouchEvent(MotionEvent event) 事件触摸

    查看全部
    0 采集 收起 来源:Activity的事件分发流程图

    笔记审核中笔记正在审核中,仅自己可见 2023-10-16

    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

    查看全部
  • 熟记流程图、翻看源码

    查看全部
    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整体传递流程比较线性,如果还是不清楚可以再回看源码及流程图消化吸收。

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

举报

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

微信扫码,参与3人拼团

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

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