我们正在开发一个应用程序,我们需要同时从多个视图中捕获MotionEvent。当我们尝试这样做时,Android只会将事件调度到第一个触摸的视图,当同时触摸另一个视图时,它只在第一个视图上给出一个ACTION_POINTER_DOWN,即使指针坐标超出其边界而在其他视图内部也是如此
我们有什么方法可以将事件分派到每个被触摸的视图(在单独的OnTouch调用中)?
我们认为从父视图中截取触摸事件然后手动将它们分派到每个视图可能会起作用,但即使这样做,也不会对我们想要实现的目标产生实际效果。有更简单的方法吗?
答案 0 :(得分:10)
至少Android 3.0增加了对在多个视图之间拆分触摸事件的支持。
AndroidManifest <uses-sdk>
定义android:minSdkVersion="11"
或android:targetSdkVersion="11"
时,默认情况下会启用拆分触摸事件。有关解释,请参阅android:splitMotionEvents和android:windowEnableSplitTouch
答案 1 :(得分:6)
触摸事件首先由当前焦点的视图捕获。如果您触摸了1个视图并且正在使用“已消耗”事件并且正在使用它,则无论您在何处单击,都会将任何其他事件分派到此视图。
如果你从touchListener返回false(因此说该事件没有消耗),它将被委托给其他视图,但在另一个单独的点击新事件将被分派到其他视图。
答案 2 :(得分:0)
虽然这应该可以自动使用Android SDK 11+,但它不能用于我的应用。我试图在主视图中捕获触摸,加上一些视图是主视图的子视图;在这种情况下,触摸仅由接收第一次触摸的视图“级别”捕获。我重新组织了我的视图结构,以便所有视图都是兄弟姐妹,现在他们正在按预期捕获事件。