gpt4 book ai didi

android - Android 如何处理 subview 中触摸点的转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:07 25 4
gpt4 key购买 nike

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

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

我知道 ViewGroups 有如下方法:dispatchTouchEvent()onInterceptTouchEvent()onTouchEvent()等等

负责在父 View 中获取触摸点并将其转换到 subview 的本地坐标空间的人之一吗?

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

最佳答案

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

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

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

关于android - Android 如何处理 subview 中触摸点的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com