按键响应onKeyDown,onKeyLongPress,onK
2018-05-29 本文已影响13人
YoungTa0
前言
有时候我们需要为按键区分长按,短按功能(虽然现在手机很少用按键,但是智能终端还是经常用到)。这时候就要对onKeyDown,onKeyLongPress,onKeyUp有深入的了解。
按键响应流程
当按下按键时,按键响应流程:
onKeyDown→onKeyLongPress→onKeyUp
如果只是短按功能实现,只需要在onKeyDown或者onKeyUp里实现就好了。
如果是要具备长按和短按功能,就需要重写onKeyDown,onKeyLongPress,onKeyUp。
长按功能实现
1.重写onKeyDown
添加一个Boolean值,用来在onKeyUp里响应长按还是短按事件
必须返回true事件才能到onKeyLongPress
public boolean onKeyDown(int keyCode, KeyEvent event) {
LoggerUtil.d("keyCode down:" + keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_NEXT:
if (event.getRepeatCount() == 0) {
longPressNext = false;
event.startTracking();
//返回true才能到onKeyLongPress
return true;
}
break;
default:
break;
}
return false;
}
2.重写onKeyLongPress
必须返回true,事件才能到onKeyUp
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_NEXT:
longPressNext = true;
return true;
default:
break;
}
return super.onKeyLongPress(keyCode, event);
}
3.重写onKeyUp
public boolean onKeyUp(int keyCode, KeyEvent event) {
LoggerUtil.d("keyCode up:" + keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_NEXT:
if(!longPressNext){
LoggerUtil.d("onKeyDown KEYCODE_MEDIA_NEXT pressed--" + event.getRepeatCount());
bt_next.setBackgroundColor(Color.parseColor("#00FF00"));
if (isRecording || !isCanTouchOrPlay) {
return false;
}
Log.e("playList", "onKeyUp: " );
stopAsr(false);
if (isSleep) {
wakeUp();
initPlay();
}
next();
}else {
Log.e("playList", "onKeyUp: "+"longPressNext"+playTypeIndex );
stopAsr(false);
AppApplication.mediaPlayer.pausePlay();
nextPlayList();
longPressNext = false;
}
break;
default:
break;
}
return super.onKeyUp(keyCode, event);
}