这个问题,换句话描述就是:一个 view
在应用了属性动画后,该 view
在新的位置仍然能正确的收到分派的事件。
我们知道, view
调用 translationXX
方法后,虽然它在屏幕上显示的位置变了,但它的 [left, top, right, bottom]
是不变的,那 ViewGroup
是如何找到这个“偷跑” view
并正确分派事件的呢?
正常情况下,当手指按下时,触摸事件会经过 ViewGroup
中的 dispatchTouchEvent
方法筛选符合条件(手指在边界范围内)的 子view
进行事件分派。这样的话,如果一个 子view
刚好应用了 translation
属性动画,那在 ViewGroup
筛选 子View
时,直接判断触摸点是否在 [left, top, right, bottom]
范围内,就会出现问题。
那它是怎么判断的呢?
- 它会先调用
子view
的hasIdentityMatrix
方法来判断这个view
是否应用过位移、缩放、旋转之类的属性动画; - 如果应用过的话