最近在项目中需要对一个按钮实现短按和长按的事件处理,总结了一下常规的写法

思路就是:

1 key_down时开始计时长按所需的时间

2 key_up时判断是否执行了长按的操作,如果未执行,那么执行短按操作,同时取消长按计时

/**

* 是否长按

*/

private boolean hasLongPress = false;

@Override

public boolean onTouch(View view, MotionEvent motionEvent) {

if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {

/*

* 按下开始执行长按计时

*/

mHandler.sendEmptyMessageDelayed(0, 1000);

return true;

} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {

mHandler.removeMessages(0);

/*如果还未执行长按,那么执行短按事件*/

if (!hasLongPress) {

doSingleClick();

}

hasLongPress = false;

return true;

}

return false;

}

private final Handler mHandler = new Handler(Looper.getMainLooper()) {

@Override

public void handleMessage(@NonNull Message msg) {

super.handleMessage(msg);

if (msg.what == 0) {

hasLongPress = true;

doLongClick();

}

}

};

private void doLongClick() {

}

private void doSingleClick() {

}