在 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。
我想 运行 我的 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。