通过数组移位的方式来记录每次点击目标控件的时间(距离系统开机的时间),然后取数组0索引位置的时间与当前系统的开机时间减去某个时间戳做对比,如果大于该相减的结果,则完成了该多击事件.
代码非常简单,以3击事件为例
long[] mHits = new long[3];//3击事件,数组长度为3,n击事件则长度为n
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//每次点击都左移一次该数组mHits
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//数组位移后,在最后一个位置记录该次点击的最新开机时间
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
//取数组的第0个下标记录的时间值去判断,因为0索引的位置是相对最早的单击时间
if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
// 3击中了,这里写处理3击事件的逻辑
}
}
});
看到没,代码非常简单,短短几行就可以实现3击事件了,如果要实现更多的点击事件,如n击事件,只需要将数组的长度设置为n就ok了.其他代码都无需改动.就是这么优雅.