[M0]按键多次点击检测(原理)
2016-03-08 00:00
351 查看
摘要: 【原创工作记录,如需转载,请注明出处,谢谢配合!】
检测按键连续多次点击,判断是否构成双击、三击等,从而执行相应的功能。
【原创工作记录,如需转载,请注明出处,谢谢配合!】
最近接到一个重新定义耳机按键键功能的需求,其中Hook键集4个功能于一身,着实折腾了一番。
最后在同事的指点下,想到了采用handler的延时消息机制。
思路如下:
按钮点击,捕获事件,计数器+1,如果时间间隔大于延时时间,那么上一次的消息就已经触发了,上一次连击事件就判定结束了,此时将计数器置为0,重新开始计数;如果时间间隔小于延时时间,那么先将上一次发出的消息(此时还未被触发)remove掉,然后重新发送新的消息。大致流程图如下:(画的不好,不准确,理解下)
免费在线流程图绘制工具
![](http://static.oschina.net/uploads/space/2016/0308/115927_aGXP_2658298.png)
简单的实现过程如下:
【原创工作记录,如需转载,请注明出处,谢谢配合!】
检测按键连续多次点击,判断是否构成双击、三击等,从而执行相应的功能。
【原创工作记录,如需转载,请注明出处,谢谢配合!】
最近接到一个重新定义耳机按键键功能的需求,其中Hook键集4个功能于一身,着实折腾了一番。
最后在同事的指点下,想到了采用handler的延时消息机制。
思路如下:
按钮点击,捕获事件,计数器+1,如果时间间隔大于延时时间,那么上一次的消息就已经触发了,上一次连击事件就判定结束了,此时将计数器置为0,重新开始计数;如果时间间隔小于延时时间,那么先将上一次发出的消息(此时还未被触发)remove掉,然后重新发送新的消息。大致流程图如下:(画的不好,不准确,理解下)
免费在线流程图绘制工具
![](http://static.oschina.net/uploads/space/2016/0308/115927_aGXP_2658298.png)
简单的实现过程如下:
// 两次点击之间的最大时间间隔,也就是消息延迟的时间; // 一旦时间超过之后,上一次的消息就被触发了,那么连击也就结束了。 private final static long DELAY_MILLIS = 1000; // 最多点击次数 private final static int MAX_COUNTS = 3; // 用来发送延迟消息,每次发送之前,都要先将上一次消息remove掉,否则上一次消息仍旧会被触发。 // 记录点击次数 private int clickCounts = 0; // 处理连击事件 private Runnable runnable = new Runnable() { @Override public void run() { textView.append("\nclickCounts = " + clickCounts); // 连击事件被消费之后,重置点击次数 clickCounts = 0; // 还原按钮状态 button.setText("Click me " + clickCounts); button.setClickable(true); } };
public void btnClicked(View view) { // 点击次数大于最大次数,将按钮置为不可点击状态, // 避免出现按钮点击了,但次数没+1出现 if(clickCounts >= MAX_COUNTS){ button.setClickable(false); return; } // 点击次数+1 clickCounts++; button.setText("Click me " + clickCounts); // 点击次数小于最大次数,remove上一次的消息(此时还未被触发),发送新的消息. // 如果两次事件间隔大于DELAY_MILLIS,那么上一次的消息就已经被触发了, // 此时再发出的消息会当作一次新的连击处理 button.removeCallbacks(runnable); button.postDelayed(runnable, DELAY_MILLIS); }
【原创工作记录,如需转载,请注明出处,谢谢配合!】
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories