Android TV开发 物理按键抖动问题
问题描述:
在做Tv开发过程中,要实现选集以及帧预览功能,需要根据按键事件控制试图控制器ControlView的显示隐藏。大概代码如下:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (isShowEsp) {//选集
cancelActionViewTimer();
} else if (isShowThumbs) {//快进
cancelProgressTimer();
cancelThumbsViewTimer();
}
break;
case MotionEvent.ACTION_UP:
if (isShowEsp) {
startDismissActionViewTimer();
} else if (isShowThumbs) {
startDismissThumbsViewTimer();
}
break;
}
}
但是在快速点按物理键盘的时候,可能会出现上一个ACTION_UP还没有响应,下一个ACTION_UP已经响应了,这就造成了会连续执行了两次cancel然后两次start,然后延迟dismiss对应View视图的task会跟想要的效果有出入(正确的应该是按下取消,弹起开始,结果变成了还在对控制视图进行操作,结果视图dismiss了,尴尬,所以要对物理按键事件进行防抖)。
防抖:
跟touch事件类似,在一定时间内,进行同样的操作,只响应一次:
long l = System.currentTimeMillis();
if (mStartTime > 0 && l - mStartTime < 500) {
//防抖
return;
}
mStartTime = l;