在 RelativeLayout 上检测多点触控

Detecting multi-touch on RelativeLayout

我想 运行 我的 Activity 中的一个方法,前提是用户在 3 秒内使用三个手指触摸屏幕。 我的 Activity 只有一个 RelativeLayout。

我正在使用 AtomicBoolean 和一个线程,但是当 3 个手指触摸屏幕时,我无法将我的代码发送到 "know"。

这是我的部分代码:

public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                wantedTime = event.getPointerCount();
                T = new Thread() {
                    public void run() {
                        while (canThreadRun.get()) {

                            wantedTime - = 100;
                            UpdateText(timerText, wantedTime);
                            try {
                                Thread.sleep(100L);
                            } catch (InterruptedException e) {
                                return;
                            }
                        }
                    }
                };
                canThreadRun.set(true);
                T.start();

                break;
            case MotionEvent.ACTION_UP:
                canThreadRun.set(false);
                break;
            case MotionEvent.ACTION_MOVE:
                break;
        }
    return false;
}

getPointerCount() MotionEvent 的方法会给你触摸屏的手指数。如果您的设备支持多点触控,它可能 return 1 或更多,否则它 returns 1.

但是你把它存储在wantedTime变量中然后用100减去它,这没有意义。

我想,你需要做的是

  • ACTION_DOWN 上,等到指针数等于 3。将当前时间存储在某处,例如 threeTouchStartTime,当它出现时。
  • ACTION_MOVE 上,获取当前时间并用 threeTouchStartTime 减去它。测试指针数是否仍然为 3 并且经过的时间是否超过 3 秒。当它发生时,就做你想做的事。

您可能想看看 GestureDetector class。