拆分动作事件-同时接受多个视图的输入

7
我正在尝试实现分离的触摸事件,这意味着能够在多个视图中单独检测触摸输入。
这是一个添加到蜂窝结构中的功能,可以使用兼容性库进行后移。更多信息请参见:http://developer.android.com/sdk/android-3.0.html,并向下滚动到“split touch events”。
基本上说: 以前,只有一个视图可以同时接受触摸事件。Android 3.0增加了对在不同视图和甚至窗口之间拆分触摸事件的支持,因此不同的视图可以接受同时发生的触摸事件。当应用程序将android:minSdkVersion或android:targetSdkVersion属性的值设置为“11”时,默认启用分离触摸事件。
以下是我用来测试它的示例项目:https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1
在该项目中有两个图像视图,点击顶部视图会产生标记为'pointer'的Log.e事件,而底部视图则产生'pointer2',但是如您所见,使用一个手指触摸顶部视图然后再用另一根手指触摸第二个视图(两个都触摸不同的视图)只会从第一个视图中产生消息。
如果在蜂窝结构上运行相同的项目,则可以正常工作,两个视图都会产生各自的“pointer”日志条目。
因此,我的问题是,如何在运行着Gingerbread或任何其他较低版本的Android的手机上获得相同的效果?

你尝试使用 onInterceptTouch 来捕捉所有的触摸事件,然后将它们分发给视图了吗? - JiTHiN
1个回答

1

由于Gingerbread不支持拆分触摸事件,解决方案之一是在两个视图上创建一个覆盖层。比如在xml或者代码中在其他视图后添加一个空的RelativeLayout,将其命名为overlay。设置overlay的OnTouchListener并通过编程确定事件发生的视图(x,y)。然后将事件发送到已确定视图的onTouchEvent中。

这种方法并不太友好,所以他们进行了修复。

示例:

    public boolean onTouch(View v, MotionEvent event)
    {
        if(view1.hitTest(event)) 
        {
            return view1.onTouchEvent(event);
        } else if(view2.hitTest(event)) 
        {
            return view2.onTouchEvent(event);
        }
        return false;
    }

谢谢,这是我最终不得不使用的方法。 - behelit

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