zoukankan      html  css  js  c++  java
  • Android连续点击多次事件的实现

    有时候我们需要实现这样的场景,类似进入开发者模式,即多次点击后执行操作。

    首先我们先看一个方法:

    System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。

    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

    src:源数组; 
    srcPos:源数组要复制的起始位置; 
    dest:目的数组; 
    destPos:目的数组放置的起始位置; 
    length:复制的长度。 
    注意:src and dest都必须是同类型或者可以进行转换类型的数组.

    final static int COUNTS = 4;// 点击次数
    final static long DURATION = 1000;// 规定有效时间
    long[] mHits = new long[COUNTS];
    

    首先我们定义次数,规定的有效时间,还有对应的数组,即我们要在一秒钟内点击4次才有效

    @Override
        public void onClick(View v) {
            continuousClick(COUNTS, DURATION);
        }
    
        private void continuousClick(int count, long time) {
            //每次点击时,数组向前移动一位
            System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
            //为数组最后一位赋值
            mHits[mHits.length - 1] = SystemClock.uptimeMillis();
            if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) {
                mHits = new long[COUNTS];//重新初始化数组
                Toast.makeText(this, "连续点击了4次", Toast.LENGTH_LONG).show();
            }
        }
    

      

    思路:首先我们点击的时候都将数组向左移动一位,将时间赋值给最后一位,从上面的代码中我们可以看出当我们点击了四次,那么最后一位就已经被移到了第一位,然后我们比较时间:

    mHits[0] >= (SystemClock.uptimeMillis() - DURATION)

    如果是在我们规定的时间内,那么就生效,执行我们所要的操作。

    SystemClock.uptimeMillis():手机开机到现在的时间。

    注意:执行操作后需要从新初始化数组:mHits = new long[COUNTS];否则点击第六次第七次的时候也会触发事件。

    参考于:https://www.cnblogs.com/tangZH/p/9832171.html

  • 相关阅读:
    DS博客作业06——图
    DS博客作业05——树
    DS博客作业03——栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实验
    C语言课设——电影院选票系统
    C语言博客作业06——结构体&文件
    C语言博客作业05——指针
    DS博客作业08--课程总结
    DS博客作业07--查找
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/12719525.html
Copyright © 2011-2022 走看看