您的位置:首页 > 其它

双击、多次点击(评论)

2015-09-09 10:01 218 查看
有的时候,我们需要实现双击响应,例如在应用首页双击退出应用,可以这么写:

private long clickTime = 0; //记录第一次点击的时间
    //退出
    private void exit() {
        if ((System.currentTimeMillis() - clickTime) > 2000) {
            ToastUtil.showToast(MainActivity.this, mToast, "再次点击退出程序");
            clickTime = System.currentTimeMillis();
        } else {
            //退出时清除application储存信息
            clearApplication();
            new DBManager(this).closeDB();
            finish();
        }
    }
这么写无疑清晰易懂,不过有的时候也会出现比较奇葩的需求,比如我要点击4下才可以退出。。。那再按照上面的思路就比较恶心了,现在有一种奇葩 + 奇葩的解决方法,思路比较绕,虽然不知道是谁发明的,但是我好景仰:

private static long[] mHits = new long[3]; // 几次点击改成几 
public void click(View view) {
    /**
     * 实现数组之间的复制
     * 函数原型:public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)
     * src:源数组;  
     * srcPos:源数组要复制的起始位置; 
     * dest:目的数组;
     * destPos:目的数组放置的起始位置; 
     * length:复制的长度。
     */
    System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
    mHits[mHits.length - 1] = SystemClock.uptimeMillis();
    
    
    if (mHits[0] >= SystemClock.uptimeMillis() - 500) {
        Toast.makeText(this, "你点击了3次", Toast.LENGTH_SHORT).show();
    }
          
}



很简单对不对?核心代码就2行,我们来思考一下这个思路是怎么执行的:

第一次点击 0 0 0 =====> 0 0 1 //复制后2位00到000,变成000,修改最后一个下标 保存点击时间

第二次点击 0 0 1 =====> 0 1 2 //复制后2位01到001,变成011,修改最后一个下标 保存点击时间

第三次点击 0 1 2 =====> 1 1 3 //复制后2位12到012,变成122,修改最后一个下标 保存点击时间

每次点击都取出第一位的值,与系统当前时间判断,小于指定时间就算作点击成功,不需要考虑点击次数

明白了吧。。。。不需要考虑点击次数,因为数组已经帮你做了这件事,思路很惊艳。

再次膜拜作者,虽然我不知道作者是谁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: