背景:
在课程车载多屏互动动画专题学习时候有一部分学员在apply patch发现有如下问题
只能拖到一小段,然后在接收事件的部分就收到了一个CANCEL事件,但是在导航手势模式下却没有该问题。
探索分析原因
那么到底啥原因导致的CANCEL事件产生呢?这个其实就需要对相关的InputDispatch代码进行详细的分析了。
在三个按钮导航键情况下,抓相关的InputDispatcher日志(注意开一些TAG以及要自己加一些log)
复现问题获取日志如下:
简单说就是在多屏互动过程中,需要把Activity从这个屏幕移动到另一个屏幕,必然就导致原来屏幕的Activity相关会有移除,体现在input端就是相关的InputWindow会被remove,这个时候input派发事件发现根本没有可以用的window了,所以自然就无法派发事件了,因为不知道派发给谁。
这里大家会有疑问导航手势难道没有移除么?它为啥可以正常派发?
这里也同样抓取一下相关的日志看看:
上面InputDispatcher日志就详细展现了为啥导航手势没有触发相关的CANCEL事件,因为它们有Gesture Monitor这中InputWindow存在于input,导致派发windows不会为none。
至于详细的普通Monitor和Gesture Monitor详细差别可以看以前发布的这篇文章:
Android13上两种监控屏幕input输入的方式–学员投稿
更多framework技术干货,请关注下面“千里马学框架”