当子视图旋转时,Android如何处理从父视图到子视图的映射触摸点?
接触点是否在某个时候发生了转变?如果有,在哪里?
我知道 ViewGroups 有这样的方法:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
等。
是负责在父视图中获取触摸点并将其转换为子视图的局部坐标空间的人员之一吗?
我尝试查看源代码,但无法真正理解所有交互。
当子视图旋转时,Android如何处理从父视图到子视图的映射触摸点?
接触点是否在某个时候发生了转变?如果有,在哪里?
我知道 ViewGroups 有这样的方法:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
等。
是负责在父视图中获取触摸点并将其转换为子视图的局部坐标空间的人员之一吗?
我尝试查看源代码,但无法真正理解所有交互。
所有这些东西都是在dispatchTouchEvent
方法中执行的。
ViewGroup
遍历它的孩子dispatchTouchEvent
MotionEvent
为每个孩子创建传递给的新副本(更准确地说是从池中获取)。看MotionEvent.obtain(MotionEvent)
MotionEvent
使用孩子的顶部和左侧位置偏移新创建的位置(请参阅getTop
和getLeft
方法)。MotionEvent#transform
(通过从孩子获取逆变换矩阵)MotionEvent
发给孩子(如果这个孩子也是ViewGroup
见pt.1)MotionEvent
(见MotionEvent#recycle
)是的,正如Delyan所提到的 - 转换仅适用于 Honeycomb 和更新版本的 Android。在旧版本上,只执行偏移。