知道按钮被按住的时间
问题描述:
我希望当你在3秒钟内按住一个按钮时,我会尝试使用上面的代码,但只有当我在暂停期间停止按住时才会执行某些操作。我应该实现一个监听器或类似的东西吗?知道按钮被按住的时间
finishPushing = true;
.
.
.
button.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
if(android.os.SystemClock.elapsedRealtime() - event.getDownTime() > 3000 && (event.getPointerCount() == 1) && finishPushing)
{
// Do something
finishPushing = false;
}
else{
finishPushing = true;
}
return false;
}
});
答
解决由于Android Touch Event determining duration
button.setOnTouchListener(new OnTouchListener()
{
private final Handler handler = new Handler();
private final Runnable runnable = new Runnable() {
public void run() {
if(mBooleanIsPressed)
{
// do whatever
}
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// Execute your Runnable after 5000 milliseconds = 5 seconds.
//After this 5secs it will check if is pressed
handler.postDelayed(runnable, 5000);
mBooleanIsPressed = true;
}
if(event.getAction() == MotionEvent.ACTION_UP) {
if(mBooleanIsPressed) {
mBooleanIsPressed = false;
handler.removeCallbacks(runnable);
}
}
return false;
}
});
你以正确的方式,但你忘了,这个方法只是获取新的触摸事件解雇。在你坚持下来的时候,最后一个事件就是key_down,下一个将是key_up。你可以开始一个小循环(确保它的异步),在做某件事之前它会计为3。如果您在3秒钟之前收到key_up,则取消它。 – 2013-03-12 09:21:39
是的,我想到了,所以我必须实现一个监听器不是吗? – 2013-03-12 09:22:56
这是一种方式。你也可以启动一个新的线程(AsyncTask会很容易),并且如果它通过,从那里启动你的动作。你可以在AsyncTask上调用.cancel()。请记住,这并不会取消任务,它只是设置一个标志,并且您必须在AsyncTask中检查isCancelled()。 – 2013-03-12 09:24:41