当旋转子视图时,Android如何处理从父视图到子视图的触摸点?
接触点是否在某个时刻进行了转换?如果是这样,在哪里?
我知道ViewGroups有以下方法:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
等
其中一个负责在父视图中获取触摸点并将其转换为子视图的本地坐标空间吗?
我尝试查看源代码,但无法真正了解所有交互。
答案 0 :(得分:7)
所有这些都是用dispatchTouchEvent
方法执行的。
ViewGroup
通过它迭代孩子们dispatchTouchEvent
MotionEvent
的新副本(从池中获取更准确)。请参阅MotionEvent.obtain(MotionEvent)
MotionEvent
的位置(请参阅getTop
和getLeft
方法)。MotionEvent#transform
方法应用转换(通过从子级获取逆转换矩阵)MotionEvent
发送给孩子(如果这个孩子也是ViewGroup
,请参阅pt.1)MotionEvent
(请参阅MotionEvent#recycle
)是的,正如 Delyan 所提到的 - 转换仅适用于Honeycomb和更新版本的Android。在旧版本中,只执行偏移。