Android实现连续点击多次事件的代码详解
有时候我们需要实现这样的场景,类似进入开发者模式,即多次点击后执行操作。
首先我们先看一个方法:
System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength);
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度。
注意:srcanddest都必须是同类型或者可以进行转换类型的数组.
finalstaticintCOUNTS=4;//点击次数 finalstaticlongDURATION=1000;//规定有效时间 long[]mHits=newlong[COUNTS];
首先我们定义次数,规定的有效时间,还有对应的数组,即我们要在一秒钟内点击4次才有效
@Override publicvoidonClick(Viewv){ continuousClick(COUNTS,DURATION); } privatevoidcontinuousClick(intcount,longtime){ //每次点击时,数组向前移动一位 System.arraycopy(mHits,1,mHits,0,mHits.length-1); //为数组最后一位赋值 mHits[mHits.length-1]=SystemClock.uptimeMillis(); if(mHits[0]>=(SystemClock.uptimeMillis()-DURATION)){ mHits=newlong[COUNTS];//重新初始化数组 Toast.makeText(this,"连续点击了4次",Toast.LENGTH_LONG).show(); } }
思路:首先我们点击的时候都将数组向左移动一位,将时间赋值给最后一位,从上面的代码中我们可以看出当我们点击了四次,那么最后一位就已经被移到了第一位,然后我们比较时间:
mHits[0]>=(SystemClock.uptimeMillis()-DURATION)
如果是在我们规定的时间内,那么就生效,执行我们所要的操作。
SystemClock.uptimeMillis():手机开机到现在的时间。
注意:执行操作后需要从新初始化数组:mHits=newlong[COUNTS];否则点击第六次第七次的时候也会触发事件。
ps:Android控件的两次及多次点击事件
自己模拟了一个Button的双击事件,想到三击事件要怎么写呢?通过查看Google大牛的多次点击的事件,发现我的学渣真是难以望其项背。。。
多次点击事件的原理:记录每次点击事件的当前时间,判断最后一次点击与第一次点击事件的时间的差值,如果小于500ms(可以自己定义这个值),认为是多次点击事件。下面以3次点击事件为例写一个代码。
1,mHits数组长度相当于点击点击次数。也就是说现在数组长度为3,我们可以监听快速点击3次的事件。
2,System.arraycopy(mHits,1,mHits,0,mHits.length-1);数组的复制,第一个参数:要被拷贝的数组;第二个参数:从哪个位置开始拷贝(这里就是从1开始);第三个参数:目标数组;第四个参数:从目标数组的哪个位置开始存放(这里是从0开始);第五个参数:拷贝的长度。通过这个方法,我们实现了对每一个点击事件的时间进行记录,可以判断任意连续3次点击是否视为3击事件。
3,if(mHits[0]>=(mHits[mHits.length-1]-500)){}:这个用来判断是否是3击事件,判断数组中下标为2的点击事件的时间与数组中下标为0的点击事件的时间差值是否小于500;若小于500认为是3击事件,处理写在{}中;否则不为3击事件。
packagecn.com.cyj.doubleclick; importandroid.app.Activity; importandroid.os.Bundle; importandroid.os.SystemClock; importandroid.view.View; importandroid.widget.Toast; publicclassMainActivityextendsActivity{ //数组长度代表点击次数 long[]mHits=newlong[3]; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** *双击事件 *@paramv */ publicvoidclick(Viewv){ //数组依次先前移动一位 System.arraycopy(mHits,1,mHits,0,mHits.length-1); mHits[mHits.length-1]=SystemClock.uptimeMillis();//开机后运行时间 if(mHits[0]>=(mHits[mHits.length-1]-500)){ Toast.makeText(this,"3连击",Toast.LENGTH_LONG).show(); } } }
总结
以上所述是小编给大家介绍的Android实现连续点击多次事件的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!