如何解决理解 Android 多点触控指针索引
我对 Android 在多点触控场景中如何分配索引和 ID 感到非常困惑!文档明确指出,指针id 在整个操作过程中都是持久的,并且索引是动态的 并相应地移动:
https://android-developers.googleblog.com/2010/06/making-sense-of-multitouch.html https://developer.android.com/training/gestures/multi
然而,当我在我的应用程序中测试它时,我得到了意想不到的结果!这是我用于检查索引的非常简单的 onTouch()
:
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v,MotionEvent event) {
int maskedAction = event.getActionMasked();
switch(maskedAction) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG,"ACTION_DOWN ---");
break;
case MotionEvent.ACTION_UP:
Log.d(TAG,"ACTION_UP ---");
break;
case MotionEvent.ACTION_POINTER_DOWN:
final int pointerIndexDown = event.getActionIndex();
Log.d(TAG,"POINTER_DOWN --- index = " + pointerIndexDown);
break;
case MotionEvent.ACTION_POINTER_UP:
final int pointerIndexUp = event.getActionIndex();
Log.d(TAG,"POINTER_UP --- index = " + pointerIndexUp);
break;
}
return true; // Necessary for accepting more pointers
}
为了测试,我将四根手指按这个顺序放在屏幕上(我特意用了 F 以免和 indexed 混淆):
F2 F0
F3 F1
显然,索引的分配顺序相同。
现在,我举起 F2
,然后是 F1
。之后,我把F1
放回原处,然后放回F2
。
这是我得到的日志:
ACTION_DOWN ---
POINTER_DOWN --- index = 1
POINTER_DOWN --- index = 2
POINTER_DOWN --- index = 3
POINTER_UP --- index = 2
POINTER_UP --- index = 1
POINTER_DOWN --- index = 1
POINTER_DOWN --- index = 2
这是有道理的,直到最后两行。当我抬起第二根手指时,屏幕上仍然有两根手指,根据文档应该有索引 0 和 1。所以,当我放下一根手指时,它应该得到索引 2 !(不是我在这里看到的 1),并且下一个手指向下然后是索引 3(不是 2)。
更简单地说,为什么在动作结束时索引不回到0-3?到最后我显然有四个手指在屏幕上,但最后一个索引是 2。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。