android Gridiew等长按和短按的区别处理(如果是长按就相应长按而不执行短按,android长按时默认短按会执行的)

1,Android Gridview中按键事件的处理有三个方法  

  public boolean onKeyDown(int keyCode, KeyEvent event)

  public boolean onKeyUp(int keyCode, KeyEvent event)

  public boolean onKeyLongPress(int keyCode, KeyEvent event)

  很明显,长按事件是放到 onKeyLongPress 函数中来处理的。

GridView如果长按时,默认会先相应短按事件(GridView.setOnItemClickListener())的,而长按键事件的处理不应该放到(GridView.setOnLongClickListener())中,而应该放到 onKeyLongPress 函数中来处理,这样才能做到长按短按就能分开,如果一开始长按就相应长按,短按就相应短按,两者不会乱掉或者说干扰。

  具体请看如下步骤:

  第一步,先在 onKeyDown 函数中判断 event.getRepeatCount 的次数(实际上长按就是由一系列的onKeyDown事件触发的)

  @Override

  public boolean onKeyDown(int keyCode, KeyEvent event) {

             。。。。。。

   

     

       

       if (event.getRepeatCount() == 0) {

               event.startTracking();

               return true;

       }

    return super.onKeyDown(keyCode, event);

  }

  如果一直按着不放,可以通过Log 查看onKeyDown 的event.getRepeatCount() 数目变化

  

  

  第二步,重载 onKeyLongPressed 函数,在这个函数中你可以添加你的长按键事件的处理

  @Override

  public boolean onKeyLongPress(int keyCode, KeyEvent event) {  

            

                   lockLongPressKey = true;

                   长按键事件的处理部分;

                   return true;

              

         return super.onKeyLongPress(keyCode, event);

  }

  第三步,如果在onKeyUp 函数中也处理了相同的按键的话,那么需要对 onKeyLongPress 和 onKeyUp 中该按键的处理作互斥处理了

  

  public boolean onKeyUp(int keyCode, KeyEvent event) {        

         if(lockLongPressKey){

                lockLongPressKey = false;

                return true;

           }

    

          return super.onKeyUp(keyCode, event);

  }

  互斥处理的原因是,长按事件处理完后,松开按键后就会执行 onKeyUp 函数。而这两处针对相同的按键想要实现的功能又不一样

  固在此添加一个 private boolean lockLongPressKey = false; 变量,在 onKeyLongPress 函数中处理过以后,在 onKeyUp中便不再处理。

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值