原地址简书:http://www.jianshu.com/p/9d7df1895b72
1.为什么要防止用户重复点击
在用户使用App的时候,并不会乖乖的按照我们的想法而执行。
下面就拿我们熟悉的Button来:
假设这个Button的点击事件是“一个登录的网络请求”,这时候我们的主角-老司机小明登场了,他娴熟的输入了自己的账号和密码,然后点击了登录,静静地等候着APP的反馈跳转,可是天有不测风云,这时候网络不是很好,APP一直还未反馈 。我们的老司机也是一个暴脾气,抓着APP的那个小Button一顿乱点。欺负完Button以后,网络好了,然后无数个网络请求被发出去了,瞬间爆炸(当然你也可以优化网络请求,这里只是举个类似的例子)。
2.如何防止重复点击
方法1.屏蔽Button的点击事件
步骤一:在Button的点击事件里面
btn.setClickable(false);//设置button不可以点击
步骤二:在网络请求完成的时候(请求获得数据或者请求失败,请求取消等操作)
btn.setClickable(true);//设置button可以点击
方法2.添加标志位判断是否执行Button内的标志位
原理:每次点击button的时候,获取当前的时间,然后对比上一次的时间,两者的差值如果小于某个规定的时间,则判断为快速点击。
public class NoFastClickUtils {
private static long lastClickTime=0;//上次点击的时间
private static int spaceTime = 1000;//时间间隔
public static boolean isFastClick() {
long currentTime = System.currentTimeMillis();//当前系统时间
boolean isAllowClick;//是否允许点击
if (currentTime - lastClickTime > spaceTime) {
isAllowClick= false;
} else {
isAllowClick = true;
}
lastClickTime = currentTime;
return isAllowClick;
}
}
使用方法:
在Button的点击事件里面加入如下代码:
if(NoFastClickUtils.isDoubleClick()) {
//快速点击后的逻辑,可以提示用户点击太快,休息一会
}else{
//正常点击的逻辑
}
3.为什么需要防止多点触控
在默认情况下,Android是支持多点触控的。
有一个界面A,A中含有2个Button。
我们这里称界面A为A女神,Button1为备胎小明,Button2为备胎小东。
A女神嘛肯定有很多备胎的联系方式,周末了A女神想找个备胎吃饭,信息已经编好了(内容自行脑补),她在思考是找小明还是小东呢?这是个值得深思的问题。想着想着,手一不小心同时点击了小明和小东。这一下蒙蔽了,A女神的尴尬癌都犯了。这时候“防止多点触控”同学为了帮助A女神解决问题,成为她广大备胎队伍中的一员勇敢的站了出来。
4.如何防止多点触控
其实很简单在2个Button的父布局中加入:
android:splitMotionEvents=”false”//不支持多点触控事件
就是这么简单,你就可以接近A女神。
还找到另一种方式:
<style name="MyStyle">
<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents>false</item>
</style>
这种方式就相当于全局设置了,可是有时候我们还是需要多点触控的,比如查看一张图片,我们需要放大看。