最近在项目中需要对一个按钮实现短按和长按的事件处理,总结了一下常规的写法
思路就是:
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() {
}