通过使用触摸侦听器保持文本视图来执行不同的任务

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 秒后处理完这两个作业。