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

问题描述

我有一个文本视图,将在该文本视图上实现触摸侦听器。

代码

 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秒钟后,这两个作业都得到处理。