天天看点

Android事件的分发、传递和消耗

android的事件分发,Android事件传递, Android事件消耗

 1.学习目的

    1.深入的理解Android事件机制

    2.解决事件冲突

        如: drawerlayout 点击穿透

          viewpager嵌套viewpager

 textview,button 

 2.事件

    1.常见的事件有单击,双击,长按,拖拽,移动,触摸,多点触控等等组成Android的事件

      2.事件的动作组成

        1.down  按下动作,所以的动作都是从down事件开始

2.move   手指移动动作,移动事件,

3.up     手指离开 (代表这个事件完成)

    3.事件传递 

      1.屏幕硬件捕捉到事件----系统 --- 应用 ----activity---- viewgroup --- viewgroup**(多层嵌套) --- view (最终的view)

  4.视图的结构

  5.事件处理的方法  ("是否" 来确定执行过程)

      1.dispatchTouchEvent "是否"进行分发  事件分发方法, activity中,viewgroup,view中都有,当事件传到该方法的时候,用来将该事件传递下去

      2.onIntercepEvent    "是否"进行拦截  事件拦截方法,  只有viewgroup中有该方法,用来拦截事件

      3.onTouchEvent        "是否"进行处理    事件处理方法 ,用来处理事件

    6.为什么view中没有onIntercepEvent

没有子的view不需要进行传递

   为什么activity中没有onIntercepEvent

           activity用来显示和交互,如果拦截了事件,则没有意思    

    7.验证事件分发

Activity A    ViewGorup G   View V       

        默认情况(默认拦截返回false)

         A-diapatchTouchEvent ---- G1-dis ---- G2-dis-----V dis---- V toucheEvent

V toucheEvent返回值   1.false ---- V dis false----G2-touch false--- G2 dis false -----  G1-touch false--- G1 dis false

A  tou  false ----A dis  false

                     2.true  ---- V dis  ture  ----G2  dis ture ----- G1  dis ture ----A dis ture

点击TextView子控件的事件监听,打印logcat日志:

11-07 11:26:29.889 3134-3134/? I/TAG: MainActivity+dispatchTouchEvent: --ACTION_DOWN

11-07 11:26:29.889 3134-3134/? I/TAG: TextViewEvent+dispatchTouchEvent: --ACTION_DOWN

11-07 11:26:29.889 3134-3134/? I/TAG: TextViewEvent+onTouchEvent: --ACTION_DOWN

11-07 11:26:29.889 3134-3134/? I/TAG: TextViewEvent+onTouchEvent:--false

11-07 11:26:29.889 3134-3134/? I/TAG: MainActivity+onTouchEvent: --ACTION_DOWN

11-07 11:26:29.889 3134-3134/? I/TAG: MainAvtivity+onTouchEvent:--false

11-07 11:26:30.009 3134-3134/? I/TAG: MainActivity+dispatchTouchEvent: --ACTION_UP

11-07 11:26:30.009 3134-3134/? I/TAG: MainActivity+onTouchEvent: --ACTION_UP

11-07 11:26:30.009 3134-3134/? I/TAG: MainAvtivity+onTouchEvent:--false

滑动TextView子控件的事件监听,打印logcat日志:

11-07 11:27:26.072 3134-3134/? I/TAG: MainActivity+dispatchTouchEvent: --ACTION_DOWN

11-07 11:27:26.072 3134-3134/? I/TAG: TextViewEvent+dispatchTouchEvent: --ACTION_DOWN

11-07 11:27:26.072 3134-3134/? I/TAG: TextViewEvent+onTouchEvent: --ACTION_DOWN

11-07 11:27:26.072 3134-3134/? I/TAG: TextViewEvent+onTouchEvent:--false

11-07 11:27:26.072 3134-3134/? I/TAG: MainActivity+onTouchEvent: --ACTION_DOWN

11-07 11:27:26.072 3134-3134/? I/TAG: MainAvtivity+onTouchEvent:--false

11-07 11:27:26.152 3134-3134/? I/TAG: MainActivity+dispatchTouchEvent: --ACTION_MOVE

11-07 11:27:26.152 3134-3134/? I/TAG: MainActivity+onTouchEvent: --ACTION_MOVE

11-07 11:27:26.152 3134-3134/? I/TAG: MainAvtivity+onTouchEvent:--false

11-07 11:27:26.177 3134-3134/? I/TAG: MainActivity+dispatchTouchEvent: --ACTION_MOVE

11-07 11:27:26.177 3134-3134/? I/TAG: MainActivity+onTouchEvent: --ACTION_MOVE

11-07 11:27:26.177 3134-3134/? I/TAG: MainAvtivity+onTouchEvent:--false