服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android实现连续点击多次事件的代码详解

Android实现连续点击多次事件的代码详解

2022-08-11 10:27妖久 Android

小编经常遇到这样的需求类似进入开发者模式,即多次点击后执行操作。下面小编通过实例代码给大家讲解Android实现连续点击多次事件的相关知识,感兴趣的朋友跟随小编一起学习吧

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

首先我们先看一个方法:

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

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

src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度。

注意:src and dest都必须是同类型或者可以进行转换类型的数组.

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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();
  }
}

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

?
1
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击事件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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实现连续点击多次事件的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/tangZH/archive/2018/10/22/9832171.html

延伸 · 阅读

精彩推荐