#原理
多击事件主要利用的是时间差内纪录的点击此数,若达到了程序员事先设定的某种要求,则响应点击事件;若没有达到,则不会响应
#简单的多击事件(双击)
//设置起始标记时间, 且每次点击的时候都会有更新变化
private long startTime = 0;
bt_click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//两次点击在一定的时间间隔内,才是双击
if(startTime!=0){
long endTime = System.currentTimeMillis();
//通过判断来控制两次点击的时间差控制范围
if(endTime-startTime<500){
Toast.makeText(getApplicationContext(), "hei~ man!", 0).show();
}
}
startTime = System.currentTimeMillis();
}
});
该方法要实现双击以上,将会变得很复杂,因此google提供了高效的方法.
#google提供的多击事件(可用于反正重复调用/启动)
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("android",
com.android.internal.app.PlatLogoActivity.class.getName());
try {
startActivity(intent);
} catch (Exception e) {
Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
}
}
System.arraycopy方法拷贝数组到另一个数组中,自己也可以拷贝到自己
System.arraycopy(mHits, 1, mHits, 0, length-1)
数组索引:【0】【1】【2】
每一次点击到都将数组的索引往前移动一位
【2】到【1】,【1】到【0】//最后一位可重新赋值(时间戳)
#根据google点击事件修改
//通过数组来控制需要点击的次数,此处是3击事件
private long[] mHits = new long[3];
bt_many_click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//1,原数组(要被拷贝的数组)
//2,原数组的拷贝起始位置索引值
//3,目标数组(原数组的数据---拷贝-->目标数组)
//4,目标数组接受值的起始索引位置
//5,拷贝的长度
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if(mHits[mHits.length-1]-mHits[0]<500){
//响应了一个三击事件
Toast.makeText(getApplicationContext(), "超级赛亚人!!!!", 0).show();
}
}
});