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

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

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

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

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



Touch 事件




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)




最最后, WMS会调用Activity的onTouchEvent





转载于:https://my.oschina.net/sfshine/blog/497773

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值