标签:
一、目标
1、实现双击点击事件
2、实现三击以及更多次点击事件
二、代码实现
第一种方法:
1、定义一个long类型的变量(取名firstClickTime),用于储存第一次点击的时间;
2、在点击事件中,通过if语句判断第一次点击时间(firstClickTime)是否大于零,如果成立则在if语句中再创建long类型的变量(取名secondClickTime),用于储存第二次点击时间,再通过if语句判断这两次点击的时间差是否小于500毫秒。如果成立则执行相应语句;若大于500毫秒,则将第一次点击的时间值(firstClickTime)重新赋值为0;然后返回。
3、通过系统时钟(SystemClock)的获取开机毫秒值uptimeMillis()方法(即表示从系统开机至当前时间的毫秒值),并用一个long类型的变量记录(取名firstClickTime);
代码:
4、以上步骤存在着“点击一次后再双击无效果”的问题。因此可通过新建一个子线程,在子线程里先睡眠500毫秒,再将第一次点击时间值(firstClickTime)重新赋值为0;
第一种实现方法点击事件代码:
1 public void click(View view) { 2 if(firstClickTime > 0){ 3 long secondClickTime = SystemClock.uptimeMillis(); 4 if(secondClickTime-firstClickTime<500){ 5 Toast.makeText(this, "双击成功", 1).show(); 6 }else { 7 firstClickTime = 0; 8 } 9 return; 10 } 11 //通过子线程的睡眠500之后再将第一次点击时间赋值为0,可防止出现在点击一次后再双击无效果的现象 12 firstClickTime = SystemClock.uptimeMillis(); 13 new Thread(){ 14 public void run() { 15 try { 16 Thread.sleep(500); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 firstClickTime = 0; 21 }; 22 }.start(); 23 }
5、三击和多次点击的实现可通过增加变量、中间值等方式完成,但变量、中间值等较多,尤其不利于多次(如10次)点击。
第二种方法(可参考系统源代码中DeviceInfoSettings.java中onPreferenceTreeClick(...)方法中的代码:
1、定义一个long类型的数组对象(取名mHits,长度暂时为3,表示点击3次,该长度就是要点击的次数),该数组用于储存每次点击时的时间;
2、在点击事件方法(click(View view))中:
(1)通过系统(System)的数组拷贝arraycopy(Object src, int srcPos, Object dst, int dstPos, int length)方法将每次点击的时间存入1中的数组的最后一位,该方法参数src表示拷贝的原数组,srcPos从数组的哪个位置开始拷贝,dst目标数组,dstPos拷贝至目标数组的哪个位置,length拷贝的数据的元素个数。
第(1)步的代码:
1 System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
上述代码的实际效果就是将1中的数组向左移了一位
(2)通过系统时钟(SystemClock)的uptimeMillis()方法将目前时间至系统开机时间的毫秒值赋值给1中数组的最后一个元素(即数组长度-1);
(3)通过if语句判断1中数组的最后一位与第一位的差值是否小于等于要求的时间限值(注意:单位是毫秒);
3、如果if语句中条件满足,则在if语句中执行相关语句代码。
第二种方法实现点击事件代码:
1 public void click(View view){ 2 System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);//将数组mHits向左移一位 3 mHits[mHits.length-1] = SystemClock.uptimeMillis(); 4 if((mHits[mHits.length-1]-mHits[0]) <= 500){ 5 Toast.makeText(this, mHits.length+"次点击了", 1).show(); 6 } 7 }
标签:
原文地址:http://www.cnblogs.com/Red-Shark/p/4482664.html