通过使用触摸侦听器保持文本视图来执行不同的任务
Performing different tasks by holding text view using touch listener
我有一个文本视图,我正在其上实现触摸侦听器。
代码:
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-5 秒之间的任何时间执行 3 秒动作,超过 5 秒的任何时间执行 5 秒动作。如果你想在 5 秒时自动执行 5 秒动作,即使用户保持触摸,那么你可以使用持续时间为 5 秒的计时器,你在初始触摸时启动计时器并在触摸时停止它。如果定时器下降到 0 而没有被触摸停止,定时器应该在 5 秒内调用你想要的相同 method/action。
很容易完成。您需要使用处理程序来处理延迟的任务。
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 秒后处理完这两个作业。
我有一个文本视图,我正在其上实现触摸侦听器。
代码:
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-5 秒之间的任何时间执行 3 秒动作,超过 5 秒的任何时间执行 5 秒动作。如果你想在 5 秒时自动执行 5 秒动作,即使用户保持触摸,那么你可以使用持续时间为 5 秒的计时器,你在初始触摸时启动计时器并在触摸时停止它。如果定时器下降到 0 而没有被触摸停止,定时器应该在 5 秒内调用你想要的相同 method/action。
很容易完成。您需要使用处理程序来处理延迟的任务。
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 秒后处理完这两个作业。