android 防快速点击的一种实现方式

来源:互联网 发布:手机淘宝怎么投诉商家 编辑:程序博客网 时间:2024/06/07 13:19

在做多媒体项目的时候,有这么个需求:需要对视频播放控制按钮做防快速点击,实现方式有多种,最终选择了如下的一种实现方式,在生产环境中也经起了检验。做成一个工具类,方便在需要的时候直接调用。

这是一种比较原始的方式,通过实现原生的view的OnClickListener,来自定义一个防快速点击的ClickListener,这样可以使用View.OnClickListener的地方都可以使用这个自定义ClickListener。

实际上RxJava通过操作符也可以高效便捷的实现,尤其是当项目中已经依赖过RxJava库的时候,直接用RxJava的实现方案更好一些。

不扯那么远了,直接贴出这种自定义OnClickListener的比较原生的实现方案:

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

import java.util.Calendar;
/**
* 防止连续点击事件,里面根据需求设置间隔时间
*/
public abstract class NoDoubleClickListener implements OnClickListener {

 privatestatic final String TAG = "NoDoubleClickListener";  

/**
  * 防止连续点击设置的毫秒值
  */
privateint MIN_CLICK_DELAY_TIME ;

private long lastClickTime = 0;


/**
  * 设置毫秒值的 点击事件 构造函数
  * @param time  多少秒延迟的毫秒值
  */

public NoDoubleClickListener(int time){

MIN_CLICK_DELAY_TIME = time;

}


@Override

public void onClick(View v) {

long currentTime = Calendar.getInstance().getTimeInMillis();

Log.i(TAG, "防止连点快进---currentTime===" +currentTime+"---lastClickTime==="+lastClickTime);

if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {

Log.i(TAG, "防止连点快进判断结果:" + (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME));

lastClickTime = currentTime;

onNoDoubleClick(v);

} else{

Log.i(TAG, "防止连点快进判断结果:" + (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME));

lastClickTime = currentTime;

}

}



/**
* 防止连续点击事件
* @param
*/

public abstract void onNoDoubleClick(View v){

}