笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序

由于一个电视机 Key事件传递出现了部分问题,但是五位方向键有时候出现问题

所以使用Activity完全接管了key事件的传递, 自己来控制焦点的变化和五位方向键的按下处理逻辑

在此温习一下key事件的传递, 日志如下

Key事件, 是从Activity分配下去, 然后View先处理, 最后Activity处理

笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序_第1张图片

Touch 事件

笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序_第2张图片



View.java 只有  dispatchTouchEvent   和onTouchEvent

VG 只有dispatchTouchEvent 和 onInterceptTouchEvent  多一个 dispatchTransformedTouchEvent VG.java没有ouTouchEvent, VG的onTouchEvent实际上是VG继承的View的, touch的处理和View也是一样的.


完整流程: 

1.VG.dispatchTouchEvent -> 


2.VG.onInterceptTouchEvent -> 如果被拦截了, 那就直接执行我自己的onTouch即可(也就是 super.dispatchTouchEvent)


3.VG.dispatchTransformedTouchEvent ->  

如果onInterceptTouchEvent 返回的不是true, 也就是没有被拦截, 那么就开始进行向孩子分发, 如果没有孩子, 就执行我自己View的Touch

两种情况如下:
 
4. 遍历这个VG中所有的孩子:

A 如果这个VG中没有孩子, 调用这个VG的View的dispatchTouchEvent也就是super.dispatchTouchEvent

B 否则, 执行孩子们的onTouch.

5.super.dispatchTouchEvent最后会执行到: 

mOnTouchListener.onTouch

6. onTouchEvent(event)

笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序_第3张图片



最最后, WMS会调用Activity的onTouchEvent





你可能感兴趣的:(笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序)