连续调用方法直到按下按钮

时间:2016-03-14 15:59:11

标签: android

我正在研究Android项目,其中我想重复调用一个函数,直到我不从按钮释放触摸,以便我应该使用哪个事件?我当前正在使用ontouch监听器,但是它会调用该函数一次。

2 个答案:

答案 0 :(得分:0)

当你用手指按住按钮时,没有这样的听众会被多次调用。这将污染UI消息队列。

您可以做的是实施OnTouchListener方法onTouch(View v, MotionEvent event)MotionEvent对象可用于区分ACTION_DOWNACTION_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);
   }
 }