我正在编写一个盲目支持的应用程序。我需要检测两指触摸。当任何辅助功能关闭时,我尝试使用 TouchListener:
RelativeLayout rl = (RelativeLayout) findViewById(R.id.main);
rl.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// get masked (not specific to a pointer) action
int maskedAction = event.getActionMasked();
Log.d(TAG, "onTouch: " + actionToString(maskedAction) + " " + event.getPointerCount());
return true;
}
});
}
// Given an action int, returns a string description
public static String actionToString(int action) {
switch (action) {
case MotionEvent.ACTION_DOWN: return "Down";
case MotionEvent.ACTION_MOVE: return "Move";
case MotionEvent.ACTION_POINTER_DOWN: return "Pointer Down";
case MotionEvent.ACTION_UP: return "Up";
case MotionEvent.ACTION_POINTER_UP: return "Pointer Up";
case MotionEvent.ACTION_OUTSIDE: return "Outside";
case MotionEvent.ACTION_CANCEL: return "Cancel";
}
return "";
}
我明白了
- D/MainActivity:onTouch:指针向下 2
- D/MainActivity: onTouch: 指针向下 3
- D/MainActivity: onTouch: 指针向上 3
- D/MainActivity:onTouch:指针向上 2
一切都很好。 但是当我打开 TalkBack 时,我很少收到多点触控事件。这意味着我需要重复几次相同的手势,但我只得到一次日志。
有人可以给我提供任何提示吗?坦克很多。
附言它可能有用。我需要实现一些手势——用两根手指轻敲,用手指双击,用两根手指长敲,用两根手指轻扫。但是滑动效果很好,因为默认情况下它们已经在 TalkBack 中被覆盖。
最佳答案
在更深入地研究了这个问题之后,我仍然有这个问题,似乎我们无法在 TalkBack 的 Touch to Explore 功能中跟踪两个指针!
如果你勾选了my question及其答案,您会看到当您激活 TalkBack 的 Touch to Explore 功能并触摸 View 时触发的事件是 onHoverEvent
。
此事件仅处理一个指针,您可以使用 MotionEvent.ACTION_HOVER_ENTER
、MotionEvent.ACTION_HOVER_MOVE
和 MotionEvent.ACTION_HOVER_EXIT
跟踪它。
没有像 ACTION_HOVER_POINTER_EXIT
这样的指针。
希望身边的人有什么解决办法可以和我们分享。
关于android - 通过触摸模式检测多点触控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202724/