Android 如何按固定时间间隔捕获触摸点位置
Android how to capture touch points location on regular time interval
如何仅在触发偶数时按固定时间间隔捕获触摸点位置。即只有在触发触摸事件后才触发时间间隔,当触摸事件终止时时间间隔终止。
目前我已经参考android开发者文档编写了捕获触点的代码。请建议如何修改代码以在规定的时间间隔内捕获触摸位置。
public boolean onTouchEvent(MotionEvent event) {
// get pointer index from the event object
int pointerIndex = event.getActionIndex();
// get pointer ID
int pointerId = event.getPointerId(pointerIndex);
// get masked (not specific to a pointer) action
int maskedAction = event.getActionMasked();
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
{
// We have a new pointer. Lets add it to the list of pointers
PointF f = new PointF();
f.x = event.getX(pointerIndex);
f.y = event.getY(pointerIndex);
// Do something
break;
}
case MotionEvent.ACTION_MOVE:
{ // a pointer was moved
for (int size = event.getPointerCount(), i = 0; i < size; i++) {
PointF f = new PointF();
f.x = event.getX(pointerIndex);
f.y = event.getY(pointerIndex);
// Do something
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:{
// trigger to stop the time interval
}
}
return true;
}
我的猜测是您想在 ACTION_POINTER_DOWN 触发时检查当前时间(系统或类似 Joda Time 的时间)并将其存储为按下的时间值。在ACTION_MOVE上,如果当前时间-按下时间==时间差,记下该点。此时将按下的时间变量重新初始化为当前时间并重复。
实现一个 TimerTask 并在定时器任务遇到特定时间时设置一个标志,例如
timer = new Timer();
if (timer != null) {
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
grabThePosition=true;
}
}, 0, samplingInterval);
}
在 onTouchEvent
中检查标志并获取 x、y 位置然后重置标志。
如何仅在触发偶数时按固定时间间隔捕获触摸点位置。即只有在触发触摸事件后才触发时间间隔,当触摸事件终止时时间间隔终止。
目前我已经参考android开发者文档编写了捕获触点的代码。请建议如何修改代码以在规定的时间间隔内捕获触摸位置。
public boolean onTouchEvent(MotionEvent event) {
// get pointer index from the event object
int pointerIndex = event.getActionIndex();
// get pointer ID
int pointerId = event.getPointerId(pointerIndex);
// get masked (not specific to a pointer) action
int maskedAction = event.getActionMasked();
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
{
// We have a new pointer. Lets add it to the list of pointers
PointF f = new PointF();
f.x = event.getX(pointerIndex);
f.y = event.getY(pointerIndex);
// Do something
break;
}
case MotionEvent.ACTION_MOVE:
{ // a pointer was moved
for (int size = event.getPointerCount(), i = 0; i < size; i++) {
PointF f = new PointF();
f.x = event.getX(pointerIndex);
f.y = event.getY(pointerIndex);
// Do something
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:{
// trigger to stop the time interval
}
}
return true;
}
我的猜测是您想在 ACTION_POINTER_DOWN 触发时检查当前时间(系统或类似 Joda Time 的时间)并将其存储为按下的时间值。在ACTION_MOVE上,如果当前时间-按下时间==时间差,记下该点。此时将按下的时间变量重新初始化为当前时间并重复。
实现一个 TimerTask 并在定时器任务遇到特定时间时设置一个标志,例如
timer = new Timer();
if (timer != null) {
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
grabThePosition=true;
}
}, 0, samplingInterval);
}
在 onTouchEvent
中检查标志并获取 x、y 位置然后重置标志。