双击、三击和多次点击事件

一、目标

  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     }
View Code

 

   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);
View Code

 

    上述代码的实际效果就是将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     }
View Code

 

 

posted @ 2015-05-06 22:13  红烧大白鲨  阅读(690)  评论(0编辑  收藏  举报