Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android如何处理子视图中接触点的转换?_Android_Android Layout_Android Custom View_Touch Event - Fatal编程技术网

Android如何处理子视图中接触点的转换?

Android如何处理子视图中接触点的转换?,android,android-layout,android-custom-view,touch-event,Android,Android Layout,Android Custom View,Touch Event,旋转子视图时,Android如何处理从父视图到子视图的触点映射 接触点是否在某个时刻进行了转换?如果是,在哪里 我知道视图组有如下方法: dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent() 等等 是否有人负责在父视图中获取接触点并将其转换为子视图的局部坐标空间 我试图浏览源代码,但无法真正理解所有的交互。所有这些内容都是在dispatchTouchEvent方法中执行的 ViewGroup遍历它的子对象 为每个子项创建传递给di

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

接触点是否在某个时刻进行了转换?如果是,在哪里

我知道视图组有如下方法:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
等等

是否有人负责在父视图中获取接触点并将其转换为子视图的局部坐标空间


我试图浏览源代码,但无法真正理解所有的交互。

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

  • ViewGroup
    遍历它的子对象
  • 为每个子项创建传递给
    dispatchTouchEvent
    MotionEvent
    的新副本(更准确地说是从池中获取)。请参阅
    MotionEvent.get(MotionEvent)
  • 使用子对象的顶部和左侧位置偏移新创建的
    MotionEvent
    的位置(请参见
    getTop
    getLeft
    方法)
  • 使用
    MotionEvent#transform
    方法应用变换(从子对象获取逆变换矩阵)
  • 最后,它将
    MotionEvent
    发送给子对象(如果该子对象也是
    ViewGroup
    请参见第1部分)
  • 它回收以前获得的
    MotionEvent
    (请参阅
    MotionEvent#recycle

  • 是的,正如前面提到的Delyan一样,转换只适用于蜂巢和Android的更新版本。在旧版本上,只执行偏移。

    应该注意,这只发生在蜂巢和更高版本上,因为它需要逐视图变换。看起来NineodelDroids增加了对旋转的支持-知道怎么做吗?看起来ViewGroup类真的必须为此而被替换。