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