检测RelativeLayout上的多点触控

时间:2017-09-08 22:21:03

标签: java android multi-touch

我想在我的Activity中运行一个方法,只有当用户在3秒内用三根手指触摸屏幕时。 我的活动只有一个RelativeLayout。

我正在使用AtomicBoolean和一个Thread,但当3个手指触摸屏幕时,我无法让我的代码“知道”。

以下是我的代码的一部分:

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

1 个答案:

答案 0 :(得分:0)

getPointerCount()的{​​{1}}方法会为您提供手指触摸屏的数量。如果您的设备支持多点触控,则可能会返回1或更多,否则返回1.

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

我认为,你需要做的是

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

您可能需要查看threeTouchStartTime课程。