双击事件,三击...多击事件的实现

按钮双击事件的实现:

  private long firstClickTime;//记录第一次按下的时间
    //按钮双击事件的实现
    public void click(View view){
        if(firstClickTime>0){
            long sencondClickTime = SystemClock.uptimeMillis();//手机开机到现在的时间
            long dtime = sencondClickTime - firstClickTime;
            if(dtime<500){
                Toast.makeText(this, "双击了", 0).show();
            }else{
                firstClickTime = 0;
            }
            return;
        }
        firstClickTime = SystemClock.uptimeMillis();
        //解决按一次就不按了的bug
        new Thread(){
            public void run() {
                try {
                    Thread.sleep(500);//保证按下500ms后,能清零第一次按下的时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                firstClickTime = 0;
            };
        }.start();
    }

线程的作用:比如,在当前界面只按下一次,停留一段时间再去双击,此时的第一击的时间肯定超过第一次按下的500ms的时间,所以此时的第一击使第一次按下的时间为0,第二击就不能触发双击事件了

更牛逼的实现方式:

/**
     * 双击事件,三击的事件....
     */
    private long[] mHits = new long[2];//记录击打的时间,2代表2击,需要实现三击,只需要改变该数组的长度为3,以此类推
    public void btnOnClick(View v){
        /*
         * 参数1:拷贝的源数组, 参数2:从源数组的哪个位置开始拷贝,参数3:目标数组(拷贝到这个数组)
         * 参数4:从目标数组的哪个位子开始写数据, 参数5:拷贝的元素的个数
         */
        System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);//数组移位的实现
        mHits[mHits.length-1] = SystemClock.uptimeMillis();//手机开机至今的时间放到数尾
        //数组尾减头的时间差大于500ms
        if(mHits[0] >= (SystemClock.uptimeMillis()-500)){
            Toast.makeText(getApplicationContext(), "多击了按钮", 0).show();
        }
    }

过程图如下,

 

posted @ 2016-09-18 19:35  ts-android  阅读(449)  评论(0编辑  收藏  举报