Android 在安卓系统中,当一个按钮的状态被按下时,我如何让它重复执行某个操作?

Android 在安卓系统中,当一个按钮的状态被按下时,我如何让它重复执行某个操作?,android,button,touch-event,Android,Button,Touch Event,我希望有一个按钮,当它被按下时,重复执行一个方法。一旦它被释放,它应该停止执行该方法 示例:用户按住按钮5秒钟。然后,应在这5秒内反复执行该方法。此外,反复调用的方法需要知道按钮被按下的时间 这是我到目前为止所拥有的。我正在使用一个onTouchListener: myButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, Mo

我希望有一个按钮,当它被按下时,重复执行一个方法。一旦它被释放,它应该停止执行该方法

示例:用户按住按钮5秒钟。然后,应在这5秒内反复执行该方法。此外,反复调用的方法需要知道按钮被按下的时间

这是我到目前为止所拥有的。我正在使用一个
onTouchListener

myButton.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                myButton.setText("Pressed!");
                while(myButton.isPressed()) {
                    doSomething(event);
                }
                break;  

            case MotionEvent.ACTION_UP:
                myButton.setText("Press me!");
            }
            return false;
        };

        private void doSomething(MotionEvent event) {
            // Do some calculation with the time the button is pressed so far
        }
    });

我的问题是,
while循环
没有正常工作,我不知道如何获取按下按钮的时间。也许是因为这件事??有什么想法吗?

使用
Runnable
Handler
定期运行方法-

private final int INTERVAL = 100;
private Handler handler = new Handler();
private Runnable autoRotateRunnable =  new Runnable() { 
    @Override
    public void run() {
        periodicMethod();
        schedulePeriodicMethod();
    }
};

public void schedulePeriodicMethod() {
    handler.postDelayed(runnable, INTERVAL);
}

public void stopPeriodicMethod() {
    handler.removeCallbacks(runnable);
}
您的切换方法如下所示-

switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        myButton.setText("Pressed!");
        schedulePeriodicMethod();
    break;  
    case MotionEvent.ACTION_UP:
        myButton.setText("Press me!");
        stopPeriodicMethod();
    }
}

至于按下和向上之间的时间,您可以将当前的
日期
存储在
操作
上,并将其与按键式监听器上的
操作
上的
日期
进行比较

Handler m_handler;
Runnable m_handlerTask ;  
m_handler = new Handler();   
m_handlerTask = new Runnable()
{
  @Override 
  public void run() { 

    // do something  
    m_handler.postDelayed(m_handlerTask, 1000);  // 1 second repeat  

  }
  };
 m_handlerTask.run();
停止奔跑

 m_handler.removeCallbacks(m_handlerTask);
你也可以使用定时器。但计时器运行在不同的线程上,所以如果使用计时器,请使用
runOnUiThread
更新ui。您还可以使用倒计时

也检查一下这个

试试这个

myButton.setOnTouchListener(new View.OnTouchListener() {

      public boolean onTouch(View v, MotionEvent event) {

          if(event.getAction()== MotionEvent.ACTION_MOVE)
          {
              myButton.setText("Pressed!");

                  doSomething(event);
                  return true;   
          }
          if(event.getAction()== MotionEvent.ACTION_UP)
          {
              myButton.setText("Press me!");
              return false;
          }
          return true;
      }

      private void doSomething(MotionEvent event) {
          // Do some calculation with the time the button is pressed so far
      }
  });

我怎样才能得到时间(到目前为止按下按钮的时间)@user2426316使用
System.currentTimeMillis()
上下操作并获得差异。