为什么属性动画移动一个控件后,目标位置仍然能响应用户事件?

原始网页直通车


这个问题,换句话描述就是:一个 view 在应用了属性动画后,该 view 在新的位置仍然能正确的收到分派的事件。

我们知道, view 调用 translationXX 方法后,虽然它在屏幕上显示的位置变了,但它的 [left, top, right, bottom] 是不变的,那 ViewGroup 是如何找到这个“偷跑” view 并正确分派事件的呢?

正常情况下,当手指按下时,触摸事件会经过 ViewGroup 中的 dispatchTouchEvent 方法筛选符合条件(手指在边界范围内)的 子view 进行事件分派。这样的话,如果一个 子view 刚好应用了 translation 属性动画,那在 ViewGroup 筛选 子View 时,直接判断触摸点是否在 [left, top, right, bottom] 范围内,就会出现问题。


那它是怎么判断的呢?

  1. 它会先调用 子viewhasIdentityMatrix 方法来判断这个 view 是否应用过位移、缩放、旋转之类的属性动画;
  2. 如果应用过的话࿰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值