我正在研究Android项目,其中我想重复调用一个函数,直到我不从按钮释放触摸,以便我应该使用哪个事件?我当前正在使用ontouch监听器,但是它会调用该函数一次。
答案 0 :(得分:0)
当你用手指按住按钮时,没有这样的听众会被多次调用。这将污染UI消息队列。
您可以做的是实施OnTouchListener
方法onTouch(View v, MotionEvent event)
。 MotionEvent
对象可用于区分ACTION_DOWN
和ACTION_UP
等操作。分别按下和释放按钮时会调用它们。
http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_DOWN
因此,在您检测到ACTION_DOWN
事件后,请根据需要多次调用您的函数。收到ACTION_UP
后停止呼叫。
但要小心,如果在UI线程上调用函数,则存在阻止它的风险。如果发生这种情况,请考虑使用Handler
或后台线程。
答案 1 :(得分:0)
使用onTouchListener检测按下按钮。然后,您可以使用Handler或AlarmManager来调用您的事件,直到达到某个条件:
this.handlerMethod = new MethodHandler(this);
boolean myCondition = false;
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
if (myCondition == false) {
handlerMethod.sendEmptyMessageDelayed(0, 55000);
}
return true;
}
return false;
}
});
/**
* private static handler so there are no leaked activities.
*/
private static class MethodHandler extends Handler {
private final WeakReference<Home> activity;
public MyTimeHandler(Home activity) {
this.activity = new WeakReference<Home>(activity);
}
@Override
public void handleMessage(Message msg) {
if (activity.get() != null) {
activity.get().myMethod();
}
sendEmptyMessageDelayed(0, 55000);
}
}