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];
否则点击第六次第七次的时候也会触发事件。
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击事件。
package cn.com.cyj.doubleclick; import android.app.activity; import android.os.bundle; import android.os.systemclock; import android.view.view; import android.widget.toast; public class mainactivity extends activity { // 数组长度代表点击次数 long[] mhits = new long[3]; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } /** * 双击事件 * @param v */ public void click(view v) { // 数组依次先前移动一位 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实现连续点击多次事件的代码详解,希望对大家有所帮助