android - 拆分运动事件 - 同时接受对多个 View 的输入

标签 android views touch

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

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

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

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

在项目中有 2 个 ImageView ,触摸顶部 View 会产生带有“pointer”标签的 Log.e 事件,而底部 View 会产生“pointer2”,但正如您所见,触摸顶部 View 然后是第二个带有单独的手指(两个手指都在触摸不同的 View )仅从 Gingerbread 中的第一个 View 生成消息。

如果同一个项目在 honeycomb 上运行,它会正常工作,并且两个 View 都会生成各自的“指针”日志条目。

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

最佳答案

由于 Gingerbread 不支持拆分触摸事件,因此一种解决方案是在两个 View 上创建一个叠加层。例如在 xml 或覆盖这两个 View 的代码中的其他 View 之后添加一个空的 RelativeLayout,我们称之为覆盖。设置叠加层的 OnTouchListener 并以编程方式确定事件发生在哪个 View (x,y)。然后将事件发送到确定的 View 的 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;
    }

关于android - 拆分运动事件 - 同时接受对多个 View 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816695/

相关文章:

android - 在 fragmentTabs 之间切换会产生意想不到的结果

sql-server - 如何在 SQL Server 中保存查询以使其在对象资源管理器中可见

performance - XPages 性能 - 同一服务器上的 2 个应用程序,1 个运行,1 个不运行

android - 使用 URL 显示新 Activity ?

ios - 如何从 admob 黑名单中删除应用程序?

android - Android 手机 2 秒后 YouTubePlayerView 中的视频暂停

android - 更改切换按钮的颜色

java - 每当我重新运行应用程序时都无法登录到应用程序

apache-flex - Flash Builder 4.5 的触摸事件

iphone - UIScrollView 和内容需要触摸移动事件