防抖动、防快速点击

工具类:NoDoubleClickListener防止过快双击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class NoDoubleClickListener implements View.OnClickListener{

public static final int MIN_CLICK_DELAY_TIME = 1000;
private long lastClickTime = 0;

@Override
public void onClick(View v) {
long currentTime = Calendar.getInstance().getTimeInMillis();
if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME){
lastClickTime = currentTime;
onNoDoubleClick(v);
}
}

public abstract void onNoDoubleClick(View v);
}

使用:view.setOnClickListener(new NoDoubleClickListener(){})

使用RxView防快速点击

build.gradledependencies中添加

1
2
//数据与控件绑定,响应控件异步事件
api 'com.jakewharton.rxbinding:rxbinding:1.0.1'

调用

1
2
3
4
5
6
RxView.clicks(findViewById(R.id.ibt_back)).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
finishAnimation();
}
});

又一城封装的 FastClickAvoider

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
/**
* 防止快速点击的工具
*
* @author zhengjb
* */
public class FastClickAvoider {
private long lastClickTime;
private long timeSpace = 500;

public FastClickAvoider(){
super();
}

public FastClickAvoider(long timeSpace){
this.timeSpace = timeSpace;
}

public synchronized boolean isFastClick() {
long time = System.currentTimeMillis();
if (time - lastClickTime < timeSpace) {
return true;
}
lastClickTime = time;
return false;
}
}

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//成员变量
FastClickAvoider fastClickAvoider = new FastClickAvoider();

OnClickListener changeListener = new OnClickListener() {

@Override
public void onClick(View v) {

//判断不能快速点击
if (!fastClickAvoider.isFastClick()) {
//...
}
}
};