响应双击事件或是多击事件

  我们用手机的是候有些事需要我们双击的,三击就不常见了。但是在我的关于手机里我们三击时会出现动画甚至是开启游戏。

我们一般的思路就是判断用户在一定的时间里点击多少次。

  我开始就想到这种方法

    public void onclick(View v){
        int i=0;
        
        if(i==1&&System.currentTimeMillis()-start<500 ){
            {
                //这里是满足条件后执行的代码
            }
            i=0;//这里吧i重新置为0
            
        }
        start = System.currentTimeMillis();
    }
}

后面我查看了goole大牛写的源码3击事件

long[] mHits = new long[3];// 数组长度表示要点击的次数


public void onClick(View view) {
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
mHits[mHits.length - 1] = SystemClock.uptimeMillis();// 开机后开始计算的时间
if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
Toast.makeText(this, "是男人!!!", Toast.LENGTH_SHORT).show();
}
}

这里解释一下这里实现主要是用复制数组的形式。该代码简洁,你想双击或三击以及其他你只要修改数组长度就可以了。

我就一三面三击事件说一下。System.arraycopy()里面有4个参数

第一个是原数组,第二个参数是从原数组第几个开始复制,第三个是要复制到的数组其实也就是本身自己(这里说白了就是进行移位),第四个参数是复制到的数组从第几个开始。最后一个参数就是复制长度。

第一步 数组为a[3]{0 0 0}长度为三的数组。当你第一次点击时候经过复制后任a[3]{0 ,0 ,SystemClock.uptimeMillis() },然后进行判读a[0]肯定不大于SystemClock.uptimeMillis() - 500) SystemClock.uptimeMillis() 就是开机时间。第二次点击是时经过同样的步骤数组变为a[3]{0 ,SystemClock.uptimeMillis(),SystemClock.uptimeMillis()s }然后进行判断a[0]=0肯定小于该数的。当第三次点击是会重新得到该数组。a[3]{SystemClock.uptimeMillis(),SystemClock.uptimeMilliss(),SystemClock.uptimeMillis()ss}//这里说明一下该三个数代表的是第一次,第二次,第三次更新的时间。然后进行比较SystemClock.uptimeMillis()与SystemClock.uptimeMillis()ss-500是否大于他  其实这里就是判断点连续点击三次看有木有超过500毫秒。

    有木有发现大牛写的代码就是这么简洁。

你可能感兴趣的:(android基础-事件点击)