【问题标题】:Detecting multi-touch on RelativeLayout在 RelativeLayout 上检测多点触控
【发布时间】:2017-09-08 22:21:02
【问题描述】:

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

我正在使用 AtomicBoolean 和一个线程,但是当 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;
}

【问题讨论】:

    标签: java android multi-touch


    【解决方案1】:

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

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

    我想,你需要做的是

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

    您可能想查看GestureDetector 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多