4

当子视图旋转时,Android如何处理从父视图到子视图的映射触摸点?

接触点是否在某个时候发生了转变?如果有,在哪里?

我知道 ViewGroups 有这样的方法: dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent() 等。

是负责在父视图中获取触摸点并将其转换为子视图的局部坐标空间的人员之一吗?

我尝试查看源代码,但无法真正理解所有交互。

4

1 回答 1

7

所有这些东西都是在dispatchTouchEvent方法中执行的。

  1. ViewGroup遍历它的孩子
  2. dispatchTouchEvent MotionEvent为每个孩子创建传递给的新副本(更准确地说是从池中获取)。MotionEvent.obtain(MotionEvent)
  3. MotionEvent使用孩子的顶部和左侧位置偏移新创建的位置(请参阅getTopgetLeft方法)。
  4. 使用方法应用变换MotionEvent#transform(通过从孩子获取逆变换矩阵)
  5. 最后,它派MotionEvent发给孩子(如果这个孩子也是ViewGroup见pt.1)
  6. 它回收先前获得的MotionEvent(见MotionEvent#recycle

是的,正如Delyan所提到的 - 转换仅适用于 Honeycomb 和更新版本的 Android。在旧版本上,只执行偏移。

于 2013-07-28T21:27:30.327 回答