原理
判断多次点击事件其实很简单,就是判断前后几次点击的时间差是否小于一个预期的值。
比如对于双击事件来说,如果两次点击操作的时间差不超过300毫秒,就认为是双击操作。
对于这个原理,基本上可以在所有平台中通用。
实现(双击)
既然要计算时间差,那么就需要来记录下每次点击的时间,一般用long类型的数组来存储,需要判断几次连击,就给数组多大的长度:
1 | private long[] hitTimes = new long[2]; |
每次点击事件执行的时候,就让数组的值依次向前覆盖,然后把本次点击的时间存储在最后一个元素中。
向前覆盖可以通过java提供的接口来实现:
1 | System.arraycopy(hitTimes, 1, hitTimes, 0, hitTimes.length - 1); |
也可以自己写一个方法来实现:
1 | private void updateTimes(long[] hitTimes) { |
当然我这个方法很烂,AS自动提示我要用 System.arraycopy 来替换。。。
接下来就是判断时间差了:1
2
3if (hitTimes[0] >= SystemClock.uptimeMillis() - 300) {
//执行双击事件
}
完整的setOnClickListener源码:1
2
3
4
5
6
7
8
9
10
11
12private void setDoubleClick() {
toastText.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
System.arraycopy(hitTimes, 1, hitTimes, 0, hitTimes.length - 1);
hitTimes[hitTimes.length - 1] = SystemClock.uptimeMillis();
if (hitTimes[0] >= SystemClock.uptimeMillis() - 300) {
//执行双击事件
}
}
});
}