android 过滤点击事件,Android中常用的暴力性点击的方法总结

前言

在项目中,不管是Android平台的或者其他平台的,都遇到过用户在一定的时间段内多次触发同一个事件,导致流程或者状态存在错误等问题。

既然存在,那就需要解决不让用户在一定的时间段内重复的点击。

解决这个问题大概有两种思路。

同一段时间内不让用户点击(过滤点击时间)

同一段时间设置内控件不响应点击

下面以Android中为例讲解。

防爆力点击

不让用户点击(过滤点击事件)

这种是过滤用户的点击事件

// 记录上一次点击响应时的时间点,默认为0

long mLastClickTime= 0;

// 定义间隔时间

final long CLICK_INTERVAL_TIME = 300;

// 下面是放入点击时间响应前过滤

if (SystemClock.uptimeMillis() - mLastClickTime < CLICK_INTERVAL_TIME) {

// 如果小于设定的范围就忽略

return;

} else {

mLastClickTime = SystemClock.uptimeMillis();

}

或许有些人会问为啥用SystemClock.uptimeMillis()这个计时而不是其他的。这个问题我看过过《「安卓开发」Android防暴力点击事件处理解决方法及其存在的问题》有解释,觉得不错,因此摘抄部分于此。

System.currentTimeMillis() 系统时间,会根据手机系统中设置的时间改变;

Calendar.getInstance().getTimeInMillis() 这种方式是最low的。因为每次点击都会创建一个Calendar实例,在后端开发中,都是拒绝使用这个类的,因为效率会比较低。

SystemClock.uptimeMillis() 自开机后,经过的时间,不包括深度睡眠的时间。Looper中所使用的也是这个方法,对时间间隔的计算比较有保证。

SystemClock.elapsedRealtime() 自开机后,经过的时间,包括深度睡眠的时间。

控件不响应点击时间

这种方式就是让控件不能点击。

Android的RadioButton、Button等都存在设置setEnabled()来是否允许用户可以点击的状态。

/**

* 设置RadioButton是否可以点击

*

* @param enable

*/

private void setRadioButtonEnable(boolean enable) {

//设置RadioButton是否可点

rb_one.setEnabled(enable);

rb_two.setEnabled(enable);

//如果设置了不可点击(false),延迟一定时间后恢复可以点击。

if (!enable) {

mHandler.sendEmptyMessageDelayed(MSG_DELAY_SET_CHECKBOX_ENABLE, DELAY_RADIOBUTTON_CLICK_TIME);

}

return;

}

小结

实际中需要自己去判断用哪一种。

个人偶尔偏向于第一次中,用得也比较多。

第二种使用需要注意setEnabled()设置后会改变一些控件的颜色状态,比如Button的可点击和不能点击的颜色可能不同(不能点击一般都是灰色的),为了不让用户感觉状态变了,可以同一配置一样的背景颜色。当然也有些就是需要通过改变颜色,从视觉上告诉用户我不能点击,这个要看项目需求。

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值