通过触摸模式检测多点触控
Detect multitouch in explore by touch mode
我正在编写一个盲目支持的应用程序。我需要检测两指触摸。当任何辅助功能关闭时,我尝试使用 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 时,我很少收到多点触控事件。这意味着我需要重复几次相同的手势,但我只得到一次日志。
有人可以给我提供任何提示吗?坦克很多。
P.S。它可能有用。我需要实现一些手势——用两根手指轻敲,用手指双击,用两根手指长敲,用两根手指轻扫。但是滑动效果很好,因为默认情况下它们已经在 TalkBack 中被覆盖。
在更深入地研究了那个问题之后,我仍然有这个问题,似乎我们无法在 TalkBack 的 Touch to Explore 功能中跟踪两个指针!
如果您选中 及其答案,您会看到当您激活 TalkBack 的“触摸探索”功能并触摸视图时触发的事件是 onHoverEvent
.
此事件仅处理一个指针,您可以使用 MotionEvent.ACTION_HOVER_ENTER
、MotionEvent.ACTION_HOVER_MOVE
和 MotionEvent.ACTION_HOVER_EXIT
.
跟踪它
没有其他指针像 ACTION_HOVER_POINTER_EXIT
。
希望身边的人有什么解决办法可以和我们分享一下。
我正在编写一个盲目支持的应用程序。我需要检测两指触摸。当任何辅助功能关闭时,我尝试使用 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 时,我很少收到多点触控事件。这意味着我需要重复几次相同的手势,但我只得到一次日志。
有人可以给我提供任何提示吗?坦克很多。
P.S。它可能有用。我需要实现一些手势——用两根手指轻敲,用手指双击,用两根手指长敲,用两根手指轻扫。但是滑动效果很好,因为默认情况下它们已经在 TalkBack 中被覆盖。
在更深入地研究了那个问题之后,我仍然有这个问题,似乎我们无法在 TalkBack 的 Touch to Explore 功能中跟踪两个指针!
如果您选中 onHoverEvent
.
此事件仅处理一个指针,您可以使用 MotionEvent.ACTION_HOVER_ENTER
、MotionEvent.ACTION_HOVER_MOVE
和 MotionEvent.ACTION_HOVER_EXIT
.
没有其他指针像 ACTION_HOVER_POINTER_EXIT
。
希望身边的人有什么解决办法可以和我们分享一下。