Android 重叠子视图的触摸事件处理
Android touch event handling for overlapping child views
我的问题是关于当子视图重叠并且触摸发生在重叠区域时在子视图上调用 onTouchEvent 的顺序。
我知道如果没有重叠的子视图,那么排序只是从目标(被触摸的最里面的视图)一直沿着它的祖先路径向上冒泡视图根。
但是,如果触摸位置在重叠视图上会怎样?这可能发生在最内部的 View(不是 ViewGroup),或者如果它们在父 ViewGroup 中重叠,也可能发生在 ViewGroup。事情很快就会变得非常复杂。
我正在编写一些示例程序来测试一些有趣的案例,但我想知道是否有关于它的任何一般知识可以与我的经验发现交叉验证。
我已经有一段时间没处理这个问题了,但如果内存服务正常,会发生的情况是 z 顺序中的顶视图首先获得触摸事件。它可以选择处理事件,或将其传递到 z 顺序中较低的位置。
如果它处理该事件,则在其 onTouchListener 的“onTouch”事件中,它 returns 为真。那时,该事件已被消费,不会传递给它背后的视图。如果它 returns false,那次触摸甚至会传递到下一个视图。
我终于自己弄明白了。查看博客 post:http://xiaolong-android.blogspot.com/2015/05/order-of-touch-event-dispatch-in-android.html
我的问题是关于当子视图重叠并且触摸发生在重叠区域时在子视图上调用 onTouchEvent 的顺序。
我知道如果没有重叠的子视图,那么排序只是从目标(被触摸的最里面的视图)一直沿着它的祖先路径向上冒泡视图根。
但是,如果触摸位置在重叠视图上会怎样?这可能发生在最内部的 View(不是 ViewGroup),或者如果它们在父 ViewGroup 中重叠,也可能发生在 ViewGroup。事情很快就会变得非常复杂。
我正在编写一些示例程序来测试一些有趣的案例,但我想知道是否有关于它的任何一般知识可以与我的经验发现交叉验证。
我已经有一段时间没处理这个问题了,但如果内存服务正常,会发生的情况是 z 顺序中的顶视图首先获得触摸事件。它可以选择处理事件,或将其传递到 z 顺序中较低的位置。 如果它处理该事件,则在其 onTouchListener 的“onTouch”事件中,它 returns 为真。那时,该事件已被消费,不会传递给它背后的视图。如果它 returns false,那次触摸甚至会传递到下一个视图。
我终于自己弄明白了。查看博客 post:http://xiaolong-android.blogspot.com/2015/05/order-of-touch-event-dispatch-in-android.html