我正在尝试为我的电视应用程序创建一个左键按下操作。
我的遥控器有左/右向上和向下键
我想运行两个不同的功能时,正常按下和长按。
我正在尝试以下操作
如果我长按,它只是做正常按下的动作更多次。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (event.isLongPress()) {
goBackward();
return true;
}else{
goBackward2();
}
return true;
default:
return super.onKeyDown(keyCode, event);
我怎么能这么做。
也无法成功,如下所示
boolean leftDownLongPressed = false;
boolean rightDownLongPressed = false;
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (action == KeyEvent.ACTION_DOWN && event.isLongPress()) {
goBackward();
leftDownLongPressed = true;
return true;
}
if (action == KeyEvent.ACTION_DOWN && !event.isLongPress()) {
if(!leftDownLongPressed){
goBackward2();
leftDownLongPressed=false;
return true;
}
}
default:
return super.dispatchKeyEvent(event);
}
}
1条答案
按热度按时间798qvoo81#
更新日期(2023年1月18日)
由于OP更新了问题,并且他希望多个DPAD键具有相同的逻辑,因此我们需要记住所有按键开始时间,而不是单个按键。
所以解决方案很简单,因为它是根据前面的例子修改,只是替换示例变量
mKeyDownStartTime
到一个Map。示例(在尝试下面的代码之前删除前面的示例实现)
日志目录
通过观察,当按下DPAD键时,会调度多次按键事件(即离散的按键事件)
因此,为了检测长按
KEY_CODE_DPAD_LEFT
,你需要自己计算持续时间,然后确定按钮按下的时间对你来说是长(例如,5秒)。要计算持续时间,您需要检测:
1.什么时候有人按这个键
1.什么时候有人留下钥匙
我相信覆盖方法
onKeyDown
和onKeyUp
都有能力做到这一点,所以这里是我刚刚编写的一个示例。示例
KeyEvent.KEYCODE_DPAD_LEFT
),我们需要一个示例变量