总体概述:
如果是双击事件要自己手动编写。
如果是三击或更多次数可以借鉴google工程师提供的System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
总结:给控件添加单击事件或触摸事件都要给该事件添加监听器
一些常用方法汇总:SystemClock.uptimeMillis();表示从开机开始cpu运行的时间。
1、给控件添加单击事件
例如:给一个图片对话框iv_drag添加一个单击事件
双击事件
iv_drag.setOnClickListener(new OnClickListener(){
//执行控件被点击时将执行的代码
/**
注:双击事件就是间隔时间很短的单机事件
可以自定义一个双击事件
*/
if(firstClickTime>0){//判断用户是否是第二次点击
long sencondClickTime = SystemClock.uptimeMillis();//获得用户第二次点击的时间
long dtime = sencondClickTime - firstClickTime;//获得两次单击的时间间隔
if(dtime<500){//如果时间间隔小于500毫秒将弹出土司
Toast.makeText(this, "双击了", 0).show();
}else{//如果间隔时间过长将firstClickTime重置
firstClickTime = 0;
}
return;
}
firstClickTime = SystemClock.uptimeMillis();//获得用户第一次点击的时间(注:一旦用户点击firstClickTime将被赋值)
//添加子线程的和原因是,让用户在单击一次后让线程睡眠500ms如果用户在有效的双击时间内还没有再一次单击那么就将firstClickTime 置为0;
new Thread(){
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
firstClickTime = 0;
};
}.start();
});
三击:
google工程师为我们提供了一个好用的方法:
//定义一个数组用来存放当前点击时的系统开机时间
long[] mHits = new long[3];
//三击事件
public void click(View view){
//src 拷贝的源数组
//srcPos 从源数组的那个位置开始拷贝.
//dst 目标数组
//dstPos 从目标数组的那个位子开始写数据
//length 拷贝的元素的个数
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
Toast.makeText(this, "恭喜你,3次点击了。", 0).show();
}
}
}
- 注:其中500是三次点击事件要在500ms内完成,可以修改
如果是4击,就将数组的长度设置为4,
5击,长度设置为5,
。
。
。
原理如下:
:设计的很巧妙,通过数组位移来实现
时间: 2024-10-26 19:19:20