Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android上检测按钮按下和释放的时间_Java_Android_Button_Timer_Pressed - Fatal编程技术网

Java 如何在android上检测按钮按下和释放的时间

Java 如何在android上检测按钮按下和释放的时间,java,android,button,timer,pressed,Java,Android,Button,Timer,Pressed,我想启动一个计时器,它从第一次按下按钮开始,到松开按钮结束(基本上我想测量按下按钮的时间)。我将在这两个时间使用System.nanoTime()方法,然后从最后一个数字中减去初始数字,以获得按下按钮所经过时间的测量值 (如果您对使用nanoTime()或其他测量按钮按下时间的方法有任何建议,我也愿意接受。) 谢谢! Andy使用而不是OnClick Listener: // this goes somewhere in your class: long lastDown; long l

我想启动一个计时器,它从第一次按下按钮开始,到松开按钮结束(基本上我想测量按下按钮的时间)。我将在这两个时间使用System.nanoTime()方法,然后从最后一个数字中减去初始数字,以获得按下按钮所经过时间的测量值

(如果您对使用nanoTime()或其他测量按钮按下时间的方法有任何建议,我也愿意接受。)

谢谢! Andy

使用而不是OnClick Listener:

// this goes somewhere in your class:
  long lastDown;
  long lastDuration;

  ...

  // this goes wherever you setup your button listener:
  button.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
           lastDown = System.currentTimeMillis();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
           lastDuration = System.currentTimeMillis() - lastDown;
        }

        return true;
     }
  });
  • 在onTouchListener中,启动计时器
  • 在这里,你可以停下来

  • 计算差异。

    这肯定会起作用:

    button.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                increaseSize();
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                resetSize();
            }
            return true;
        }
    });
    

    不幸的是,当用键盘按下按钮时,这不起作用。它只在被触摸时才起作用。所以你想看看键盘按钮被按下的时间有多长?这个按钮需要修改。如果按下按钮,则在按下状态下滑动手指握住按钮,然后松开手指,按钮保持按下状态。您还需要添加
    MotionEvent.ACTION\u CANCEL
    来处理这种行为。在
    onTouch
    方法的末尾还缺少
    return true
    ,类似于本文: