首页 > 代码库 > 多次点击事件
多次点击事件
Android给我们提供了单次点击事件(以及双击),虽然在设置中我们有发现多次点击事件的案例(如启用开发者模式),但Android本身并没有提供多次点击事件的实现。有如下两种实现方式:
定义存贮多个事件点的变量
首先以双击事件为例说明。
定义一个存贮上一个第一次点击的变量,如果第二次点击的时间间隔小于500毫秒,则认为是双击事件。
private long startClickTime;
public void onClickView() {
long nextClickTime = SystemClock.uptimeMillis();
if (startClickTime <= 0) startClickTime = SystemClock.uptimeMillis();
else {
if (nextClickTime - startClickTime < 500) {
Toast.makeText(this, "双击", Toast.LENGTH_SHORT).show();
startClickTime = 0L;
} else startClickTime = nextClickTime;
}
}
这种方式有个缺陷,如果要实现多次点击,那么就需要定义存贮多个事件点的变量,很显然不适合多次点击的处理。
使用Google提供的api中采用的算法。
能够实现n次点击事件,我们需要定义一个n长度的数组,每点击一次将数组里的内容按序号整体向左移动一格,然后给n-1出即数组的最后添加当前的时间,如果0个位置的时间大于当前时间减去500毫秒的话,那么证明在500毫秒内点击了n次。
private long[] mHits = new long[4];
private static final int MAX_TIME = 500;
public void onClickView() {
Toast.makeText(this, "击", Toast.LENGTH_SHORT).show();
//复制数组的元素从第1个位置开始,目标地址是第0个位置,复制的长度为数组长度-1
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//给数组最后一个位置赋值
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
//判断数组第一个位置的时间与当前时间的差是否小于500毫秒,假如小于的话,就认为是多次点击事件
for (int i = 0; i < mHits.length; i++) {
if (mHits[0] > SystemClock.uptimeMillis() - MAX_TIME) **N击事件条件**;
if (mHits[i] > SystemClock.uptimeMillis() - MAX_TIME) {
Toast.makeText(this, mHits.length - i + "击", Toast.LENGTH_SHORT).show();
break;
}
}
}
if (mHits[0] > SystemClock.uptimeMillis() - MAX_TIME) 条件成立时表明已经是你定义的N击事件。
多次点击事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。