最近在一个平台上处理长按键盘事件,因为这个平台对于长按响应是 onKeyDown,onKeyUp循环,而正常应该是 onKeyDown、onKeyDown …… onKeyUp。

因为这个机制导致很多方法不能实现,比如启动定时器,计数器等等。自己束手无策了

 

希望得到大家的帮助

1 收藏


直接登录
最新评论
  • Kenneth hired worker 2016/11/25

    I implement the function by timeout. hope this could help you.

    Way 1: http://codepen.io/kennethhu/pen/JbJBEM

    Way 2: http://codepen.io/kennethhu/pen/gLRjgE

     

  • =_= 程序员 2016/11/26

    能否描述的更具体些咧~

     

    • 南波万 Android 2016/11/27

      就是在正常平台上,长按按键的时候系统调用的方法是 onKeyDown、onKeyDown。。。直到你松开按键,按键弹起来才会调用 onKeyUp,这种情况判断长按很简单,但是目前这个平台在长按的时候是这样调用的。onKeyDown,onKeyUp。。这样循环,就相当于把长按变成了连按。请问如何将连按判断为长按?

      • =_= 程序员 2016/11/27

        每次key down-up过来,记录一个状态和时间,观察长按下的时候过来的时间间隔。之后过来的down-up的event时间和上个差在这个间隔内就判定为长按咯?注意状态的恢复

        • 南波万 Android 2016/11/28

          我之前就是这么用的,可是在连击的时候会触发长按。= =! 现在我在 down 中添加一个计数器, up 中注册一个计时器,时间到了后计数器归零,每次 up 时把上一个计时器注销,这样暂且实现了,但是还是会有连按到一定次数会调用长按的 bug。这个平台长按系统调用速度居然还没手动连按快,醉了