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

时间:2012-01-11 09:10:51

标签: android views touch

我正在尝试让分割触摸事件正常工作,这意味着能够在多个视图中分别检测触摸输入。

这是添加到蜂窝的功能,可以使用兼容性库向后移植。 这里有更多信息:http://developer.android.com/sdk/android-3.0.html - >向下滚动到“拆分触摸事件”

它基本上说: 以前,只有一个视图可以同时接受触摸事件。 Android 3.0增加了对跨视图甚至窗口分割触摸事件的支持,因此不同的视图可以接受同时触摸事件。 当应用程序面向Android 3.0时,默认情况下会启用拆分触摸事件。也就是说,当应用程序将android:minSdkVersion或android:targetSdkVersion属性的值设置为“11”时。

以下是我用来测试它的示例项目: https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1

在项目中有2个图像视图,触摸顶部的图像视图会生成带有“指针”标记的Log.e事件,而底部视图会生成“指针2”,但是您可以看到触摸顶视图然后触摸第2个图像视图单独的手指(两者都触摸不同的视图)仅生成姜饼中第一个视图的消息。

如果在蜂窝上运行相同的项目,它可以正常工作,并且两个视图都会生成各自的“指针”日志条目。

所以我的问题是,如何在运行姜饼或任何其他较低版本的Android版本的手机上获得同样的效果?

1 个答案:

答案 0 :(得分:1)

由于Gingerbread不支持拆分触摸事件,因此一种解决方案是在两个视图上创建叠加层。例如在xml中的其他视图或覆盖两个视图的代码之后添加一个空的RelativeLayout,让我们称之为叠加。设置叠加层的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;
    }