Android MotionEvent.getActionIndex() 和 MultiTouch

2024-02-01

我试图在事件 MotionEvent.ACTION_MOVE 发生时获取指针 id。

我通过调用 event.getActionIndex() 来做到这一点,但对于第二个、第三个、第四个和第五个手指,它总是返回 0。

我在 Galaxy S I9000 上使用 Gingerbread 2.3.3

这是我的代码

switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE: {
    Log.d("D","  getActionIndex()="+event.getActionIndex());
    };break;
}

这是调试结果

05-02 19:20:08.628: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=1
05-02 19:20:08.781: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=1
05-02 19:20:08.820: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=1
05-02 19:20:08.914: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=1
05-02 19:20:09.070: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.187: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.324: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.460: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.523: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.542: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:09.679: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=3
05-02 19:20:09.703: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=3
05-02 19:20:09.847: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=3
05-02 19:20:10.117: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=3
05-02 19:20:10.261: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.281: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.304: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.371: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.410: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.433: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.519: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.558: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=4
05-02 19:20:10.613: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=3
05-02 19:20:10.640: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=2
05-02 19:20:10.656: DEBUG/D(4534): getActionIndex()=0  getPointerCount()=1

我使用 3 种方法来委托鼠标事件的责任。它在我的 2.3 HTC Desire S 上运行良好。它能够捕获多个触摸事件。

public void processMouseMove(int mouseX, int mouseY, int pid)
public void processMouseDown(int mouseX, int mouseY, int pid)
public void processMouseUp(int mouseX, int mouseY, int pid)


public boolean onTouch(View v, MotionEvent event) { 
    int p = event.getActionIndex();
    switch(event.getActionMasked()){
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
            processMouseDown((int)event.getX(p), (int)event.getY(p), event.getPointerId(p));                
        break;              
        case MotionEvent.ACTION_POINTER_UP:                 
        case MotionEvent.ACTION_UP:
            processMouseUp((int)event.getX(p), (int)event.getY(p), event.getPointerId(p));
            break;
        case MotionEvent.ACTION_MOVE:
            final int historySize = event.getHistorySize();
            final int pointerCount = event.getPointerCount();
            for (int h = 0; h < historySize; h++) {
                 for (int p1 = 0; p1 < pointerCount; p1++) {
                    processMouseMove((int)event.getHistoricalX(p1, h), (int)event.getHistoricalY(p1, h), event.getPointerId(p1));
                 }
            }
            for (int p1 = 0; p1 < event.getPointerCount(); p1++) {

                processMouseMove((int)event.getX(p1), (int)event.getY(p1), event.getPointerId(p1));
            }
    }
    return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android MotionEvent.getActionIndex() 和 MultiTouch 的相关文章

随机推荐

  • 我可以使用哪种 javascript 或 JQuery 图表工具来创建带有垂直列标签的热图?

    我正在寻找一个可以绘制热图的图表库 并且可以选择垂直显示列标签文本 允许我在屏幕上显示大量列 无论标签的长度如何 理想情况下 图书馆对慈善 教育组织免费 以下是带有垂直标签的简单热图示例 该图表是使用 FusionCharts 创建的 它不
  • 公众无法访问 Firebase Cloud Function [应用程序正在请求访问您的 Google 帐户的权限。]

    我刚刚将 Express 与 Firebase Cloud Functions 结合使用并创建了一个端点 app get time req res gt const date new Date const hours date getHou
  • 使用 Passport 和 Laravel 进行身份验证时返回访问令牌和用户

    我正在使用 Laravel 5 4 和 Passport 创建一个 API API 授权是使用密码授予类型完成的 以下是请求示例 http new GuzzleHttp Client response http gt post http y
  • 在 Woocommerce 结帐页面中的所有默认通知之前显示自定义通知

    我使用以下代码在结帐页面中向未登录的 woocommerce 用户 访客 显示自定义消息 add action woocommerce before checkout form my custom message function my c
  • 将保存/更新调用轨道转换为 sql

    我想获取运行时生成的sql save 当我在控制台中运行此命令时 irb main 018 0 gt a User last irb main 018 0 gt a first name gt Mohan irb main 019 0 gt
  • Powershell进度条

    我是 Powershell 新手 在获取进度条来使用 foreach object 循环时遇到问题 如果可能的话 感谢 Chris 下面是我到目前为止所得到的 我的问题是进度条到达某个点 然后出现错误 101 参数大于最大允许范围 100
  • 如果 RSS 源未更改,则不执行任何操作

    我想每隔几分钟运行一个Python脚本 该脚本首先从 rss feed 中获取最新文章 使用 feedparser 我想要的是 当最新的文章与上次运行的文章相同时 脚本就结束了 我该如何实现这个目标 既然你在 python 问题中提到 fe
  • UML 的高效替代方案

    我发现 UML 很难快速创建 我想更快地表达我的想法 特别是对于小型开源项目 如果它足够大 我会费心使用 UML 但是这个项目对于这种事情来说太小了 我不想要另一个让我觉得 不 我稍后再做 的工具 有什么建议么 UML 不是一种工具 而是一
  • 是否可以在免费套餐中使用 Google Cloud Kubernetes 集群?

    纵观免费套餐特点 https cloud google com free docs gcp free tier对于 Google Cloud 它指出 VM 实例必须位于以下区域us west1 VM 机器类型必须是f1 micro 因此 为
  • Java 方法中 byte[] 和 byte ... 的区别

    有人问我这两个方法参数之间有什么区别以及为什么要在专门分配的数组上使用 putMessage byte send putMessage byte send 我无法自信地回答他们 也不记得 叫什么 The 在你的第一个例子中被称为vararg
  • 如何在node.js后端获取昨天的日期?

    我在用日期格式包在节点后端 我可以使用获取今天的日期 var today dateFormat new Date 以相同或其他方式我想要昨天的约会 我仍然没有得到任何正确的方法 目前我正在使用大量代码手动计算昨天的日期 除了手动写入还有其他
  • 2 个容量相同的背包 - 为什么我们不能两次找到最大值

    如果给你一组具有值和重量的物品 w1 v2 w2 v2 wn vn 以及两个容量相等的背包 Knap1 和 Knap2 C 则目标是确定可以分别放入 Knap1 和 Knap2 的物品 S1 和 S2 的最佳子集 并最大化背包的价值和容量
  • 如何确保表单中编码的文本是utf8

    我有一个 html 框 用户可以用它输入文本 我想确保在框中输入的所有文本都以 UTF 8 编码或在用户完成输入时转换为 UTF 8 此外 我不太明白在输入文本框时如何选择各种UTF编码 一般来说 我对以下内容感到好奇 当用户在文本框中键入
  • Sql Server Management Studio 对象资源管理器消失 - 丢失 - 消失

    SQL Server 管理工作室Object Explorer菜单消失了 捷径F8和view gt object explorer方法也不做任何事情 我点击了键盘上的所有内容 用谷歌搜索 但什么也没有 我真的需要这个回来 在没有对象资源管理
  • Font Awesome 无法加载资源 /font/fontawesome-webfont.woff?v=3.0.1

    网站上一切看起来都很好 但这两个错误显示在控制台中 如果我点击该网址 就会下载字体 一直试图追踪这个问题一段时间 但我在控制台中收到两个错误 无法加载资源资源 font fontawesome webfont woff v 3 0 1无法加
  • JavaScript 超过超时时间

    我使用 jquery 开发移动应用程序 下面是我的代码 当我向包含的页面添加 5 或 6 行时 一切顺利 但如果我添加多行显示错误消息 Javascript执行超时 function succes recu list rubrique tx
  • 在 C++ 中查找大于 4GB 的文件? [复制]

    这个问题在这里已经有答案了 我正在使用 MS Visual Studio 2012 编译器 并且正在 x64 发布模式下构建 使用 ifstream 我可以读取大于 4GB 的文件 问题是 我无法找到 10GB 文件中间的位置 当我像这样使
  • SQL 计数日期范围

    我正在尝试查询 SQL 数据库以获取每个客户在特定日期范围内发出的订单数 我有一个订单列表如下 CustomerName ClientID DateOrdered Customer No 2 10 2011 11 25 Customer N
  • 如何在 OSX 10.9 上安装 gdb

    如何在 OSX 10 9 上安装 gdb 我尝试使用 macports port install gdb Password gt Updating database of binaries 100 0 gt Scanning binarie
  • Android MotionEvent.getActionIndex() 和 MultiTouch

    我试图在事件 MotionEvent ACTION MOVE 发生时获取指针 id 我通过调用 event getActionIndex 来做到这一点 但对于第二个 第三个 第四个和第五个手指 它总是返回 0 我在 Galaxy S I90