从头学android_双击事件(多击事件)的算法

双击事件的算法

android 中提供了click事件,但是没有提供doubleClick事件,如需要使用,需要程序员自定义doubleClick方法。
其实这也不算太难,双击不过就是在很短时间内的多次单击事件而已,只需要记录下来上次单击的时间,与这次比较,如果间隔小于500ms(或其他),则触发双击逻辑。

业余的双击算法
private long lastClickTime = 0;
private void doubleClick_1() {
    long now = System.currentTimeMillis();//获取系统当前时间
    if (lastClickTime > 0) {//上次有没有被单击或
        if (now - lastClickTime < 500) {//触发双击逻辑
            lastClickTime = 0;//此次双击事件已完成,lastClickTime清零
            /**双击的业务逻辑*/
            return;
        }
    }
    lastClickTime = now;
}

嗯 的确,这样做也可以,但是,看到了谷歌大牛是这样写的:

专业的双击算法
private long[] mHits = new long[2];
private void doubleClick_2() {
    System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
    mHits[mHits.length - 1] = SystemClock.uptimeMillis();//获取手机开机时间
    if (mHits[mHits.length - 1] - mHits[0] < 500) {
        /**双击的业务逻辑*/
    }
}

如果想要改成三击,只需要private long[] mHits = new long[3];就好。

学习一个:
  1. System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
    这是在拷贝数组,将原来的数组中的元素的索引统一向前移动一位,原来的第一个元素被覆盖放弃,原来的最后一位成了倒数第二位。
  2. mHits[mHits.length - 1] = SystemClock.uptimeMillis();
    这是将数组的最后一个元素赋值为当前的时间。
  3. 这样的话 每次执行click的时候,就会把当前的时间存放在最后一位,而前若干次的click时间都会被顺延到数组的前一位,每次都判断一下数组的最后一个元素即当前时间 与 数组的第一个元素即往前length个的时间 间隔是否满足要求来触发多击逻辑。
感悟下哈
  1. google大牛的智慧值得钻研
  2. MarkDwon写博客的感觉真棒了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值