通过触摸模式检测多点触控

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 "";
}

然后我得到

  1. D/MainActivity: onTouch: 指针向下 2
  2. D/MainActivity:onTouch:指针向下 3
  3. D/MainActivity:onTouch:指针向上 3
  4. D/MainActivity: onTouch: 指针向上 2

一切都很好。 但是当我打开 TalkBack 时,我很少收到多点触控事件。这意味着我需要重复几次相同的手势,但我只得到一次日志。

有人可以给我提供任何提示吗?坦克很多。

P.S。它可能有用。我需要实现一些手势——用两根手指轻敲,用手指双击,用两根手指长敲,用两根手指轻扫。但是滑动效果很好,因为默认情况下它们已经在 TalkBack 中被覆盖。

在更深入地研究了那个问题之后,我仍然有这个问题,似乎我们无法在 TalkBack 的 Touch to Explore 功能中跟踪两个指针!

如果您选中 及其答案,您会看到当您激活 TalkBack 的“触摸探索”功能并触摸视图时触发的事件是 onHoverEvent .

此事件仅处理一个指针,您可以使用 MotionEvent.ACTION_HOVER_ENTERMotionEvent.ACTION_HOVER_MOVEMotionEvent.ACTION_HOVER_EXIT.

跟踪它

没有其他指针像 ACTION_HOVER_POINTER_EXIT

希望身边的人有什么解决办法可以和我们分享一下。