我有一个自定义视图,我想检测用户何时按下/触摸同一点超过 2 秒。我一直在使用一个onTouch
事件来检测用户何时首次触摸屏幕,然后在 2 秒后查看他是否仍在触摸同一个位置。但是,我如何检测用户何时将手指移动到不同的位置(与 期间的位置不同ACTION_DOWN
)并在那里保持超过 2 秒。我的 onTouch 事件代码如下。我尝试实现相同的逻辑,ACTION_MOVE
但它没有正常工作。如果用户触摸屏幕,将手指移动到某个位置然后保持静止超过 2 秒,我如何检测到它?
有没有其他方法或类可以帮助我实现同样的目标?
@Override
public boolean onTouchEvent(final MotionEvent event) {
// MotionEvent object holds X-Y values
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.d("Action", "Move");
mViewIsPressed = true;
touchY = event.getY();
break;
case MotionEvent.ACTION_DOWN:
Log.d("Action", "Down");
String text = "You click at x = " + event.getX() + " and y = " + event.getY();
Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
yCoordPrev = event.getRawY();
runnable = new Runnable() {
public void run() {
//Check if user is still holding down on the view
if (mViewIsPressed) {
yCoordCurr = event.getRawY();
//Check if position that is being held down is the same (or within range) as 2 seconds ago
Log.d("YPrev: ",String.valueOf(yCoordPrev));
Log.d("YCurr: ",String.valueOf(yCoordCurr));
if ((yCoordCurr < yCoordPrev + 10) && (yCoordCurr > yCoordPrev - 10)) {
//Do what you want here after 2 seconds of pressing
Log.d("Fire: ", "fire");
}
}
}
};
handler.postDelayed(runnable, 2000);
mViewIsPressed = true;
break;
case MotionEvent.ACTION_UP:
Log.d("Action", "Up");
if (mViewIsPressed) {
mViewIsPressed = false;
yCoordCurr = event.getY();
//Cancel the runnable because the user stopped pressing
handler.removeCallbacks(runnable);
}
break;
}
invalidate();
return true;
}