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

beh*_*lit 7 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版本的手机上获得相同的效果?

bep*_*aya 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;
    }
Run Code Online (Sandbox Code Playgroud)