多个视图的OnTouch事件

10
我们正在开发一款应用程序,需要同时从多个视图中捕获MotionEvents事件。当我们尝试这样做时,Android仅将事件分派给第一个触摸到的视图,并在同时触摸另一个视图时,仅在第一个视图上提供ACTION_POINTER_DOWN,即使指针坐标在其边界之外且在其他视图内部。
有没有办法让所有触摸的视图都分派事件(在OnTouch的不同调用中)?
我们认为拦截父视图中的触摸事件,然后手动将它们分派到每个视图可能会起作用,但即使它有效,也不适合我们想要实现的目标。有更简单的方法吗?
3个回答

10

至少从Android 3.0开始,支持在多个视图之间分割触摸事件。

当AndroidManifest的<uses-sdk>定义为android:minSdkVersion="11"android:targetSdkVersion="11"时,默认启用拆分触摸事件。有关详细信息,请参见android:splitMotionEventsandroid:windowEnableSplitTouch


6
触摸事件首先被当前焦点视图所捕获。如果您触摸了一个视图并且“消耗”了事件并正在处理它,则任何其他事件都将被分派到该视图,无论您在何处单击。
如果从您的touchListener返回false(这样说事件未被消耗),则它将被委派给其他视图,但是在另一个单独的单击上,新事件将被分派到其他视图。 http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775 http://developer.android.com/guide/topics/ui/ui-events.html

1
我遇到了同样的问题,即如果我在屏幕左侧触摸任何地方,焦点视图就会移动,你能帮我解决这个问题吗? - Arif Nadeem

0

虽然 Android SDK 11+ 应该会自动处理这个问题,但在我的应用中并没有生效。我试图在主视图和一些子视图中捕获触摸事件;在那种情况下,只有接收到第一个触摸的视图才能捕获触摸事件。我重新组织了视图结构,使所有视图成为同级,并且现在它们按预期捕获事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接