安卓多点触控事件索引
Android multitouch event indexes
我遇到了一个问题,即多点触控事件导致手指仍按压时释放触摸索引。
我的 Java 包装器代码粘贴在下面。该函数将 activePointer 整数传递给一个 C++ 函数,该函数使用 activePointer 值作为数组索引将 up/down 状态存储在数组中。向下事件将数组值设置为 true,向上事件将数组值设置为 false。
行为如下:
- 如果按下一根手指,则触摸索引 0 为真。
- 如果按下两根手指,则触摸食指 0 和 1 都为真。
- 如果随后移除第二根手指,则触摸索引 0 为真,触摸索引 1 为假(如预期)。
- 如果移开第一根手指,第二根手指左边触摸,则触摸索引 0 和 1 都是假的。我希望触摸索引 0 是假的,而触摸索引 1 仍然是真的。
这是我的 Java 包装器代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
Integer activePointer = (event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT);
Float x = event.getX(activePointer);
Float y = event.getY(activePointer);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
// Log.i("touchtest", "action_down " + activePointer.toString() +
// "(" + x + "," + y + ")");
androidRenderer.touch(x, y, activePointer);
break;
case MotionEvent.ACTION_MOVE:
// Log.i("touchtest", "action_move " + activePointer.toString() +
// "(" + x + "," + y + ")");
androidRenderer.move(x, y, activePointer);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
// Log.i("touchtest", "action_up " + activePointer.toString() + "("
// + x + "," + y + ")");
androidRenderer.up(x, y, activePointer);
break;
}
return true;
}
我已经阅读了这里的文档,但不是很清楚。
我弄乱了event.findPointerIndex
函数,但无法推断出它实际在做什么的任何模式。
我无法想象这是一个罕见的问题。 有这方面的经验的人可以提供您的建议吗? 谢谢。
我不怎么处理多点触控事件,但也许在您的 switch 语句中包含默认大小写可能会有所帮助。
(event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT)
只会给你指针索引。在整个多点触控手势期间,指针索引可能会更改。
您实际需要的是一个指针 ID。 MotionEvent.ACTION_POINTER_ID_SHIFT
名称有点令人困惑,因为它返回指针索引而不是指针 ID,因此自 API 8 以来它已被弃用并重命名为 MotionEvent.ACTION_POINTER_INDEX_SHIFT。指针 ID 唯一标识指针。
要获取指针 ID,请使用 getPointerId(activePointer)。
将指针 ID 传递给androidRenderer.xxx(x, y, activePointerId);
,您应该没问题。
相关文章:
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- Android NDK传感器向事件队列报告奇怪的间隔
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 从文本文件中读取时钟时间和事件时间并进行处理
- 重载元组索引运算符-C++
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟随整数索引列表的自定义类迭代器
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 调用 wxListCtrl::EditLabel (索引) 时无法捕获EVT_LIST_BEGIN_LABEL_EDIT事件
- 安卓多点触控事件索引