我正在尝试在解锁按钮上设置我自己的长按侦听器。每当我按下解锁按钮时,它会总结持续时间,我可以解锁永久点击。
Unlock.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Unlock.setText("Press to unlock");
isLongPress = true;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isLongPress) {
Unlock();
}
}
}, longClickDuration); //amount of time of long click
} else if (event.getAction() == MotionEvent.ACTION_UP) {
Unlock.setText("Unlock");
isLongPress = false;
}
return true;
}
});
}catch (Exception e) {
// TODO: handle exception
}
}
答案 0 :(得分:0)
如果您只想处理长时间点击,请考虑使用以下代码:
Unlock.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
your code
}
});
但是如果在某个(可自定义的)时间之后调用Unlock();
,则应该在MotionEvent.ACTION_UP
处理程序中测量此时间。正如@Attaullah Khan所说,使用SystemClock.elapsedRealtime()
系统计时器在两个时刻(按下并释放按钮时)正确计算毫秒数,如果时间大于longClickDuration
,则调用Unlock
您在handler.postDelayed
处理程序中调用的MotionEvent.ACTION_DOWN
只会在longClickDuration
间隔后调用按下状态,如果您的按钮在此时突然被按下,则验证通过正确