问题描述
代码:
textview_temp2.setonTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view,MotionEvent motionEvent) {
switch(motionEvent.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.i("TAG1","touched Down");
return true;
case MotionEvent.ACTION_UP:
Log.i("TAG3","touched UP");
return true;
}
return false;
}
});
现在,如果用户按住文本视图5秒钟或更长时间,我想调用事件操作。另外,这两个事件中只有一个应该被调用。
解决方法
在触摸时节省系统时间,然后在触摸时比较经过的时间。执行3秒动作的时间介于3-5秒之间,执行5秒动作的时间大于5秒。如果即使用户保持按下状态也要在5秒后自动执行5秒动作,则可以使用持续时间为5秒的计时器,可以在初次按下时启动计时器,而在按下时停止计时。如果计时器降为0而不被修饰停顿,则计时器应在5秒钟内调用所需的相同方法/动作。
,容易实现。您需要使用处理程序来处理延迟的任务。
final int STEP3SECS = 3;
final int STEP5SECS = 5;
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == STEP3SECS) {
//do 3 second job
} else if (msg.what == STEP5SECS) {
//do 5 second job
}
return false;
}
});
然后:
textview_temp2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view,MotionEvent motionEvent) {
switch(motionEvent.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.i("TAG1","touched Down");
handler.sendEmptyMessageDelayed(STEP3SECS,3000);
handler.sendEmptyMessageDelayed(STEP5SECS,5000);
return true;
case MotionEvent.ACTION_UP:
Log.i("TAG3","touched UP");
handler.removeCallbacksAndMessages(null);
return true;
}
return false;
}
});
ACTION_UP
可以在3个不同的时间间隔内发生:3秒之前,没有任何工作完成。 3秒之后和5秒之前,仅完成3秒的工作。 5秒钟后,这两个作业都得到处理。