自定义一个NoDoubleClickListener类,实现OnClickListener接口:

public abstract class NoDoubleClickListener implements View.OnClickListener {    private static long lastClickTime = 0;    public static final int MIN_CLICK_DELAY_TIME = 700;    public abstract void onNoDoubleClick(View view);    @Override    public void onClick(View v) {        long currentTime = Calendar.getInstance().getTimeInMillis();        if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {            lastClickTime = currentTime;            onNoDoubleClick(v);        }    }}

使用NoDoubleClickListener代替OnClickListener来实现点击事件:

mbutton.setOnClickListener(new NoDoubleClickListener() {        @Override        protected void onNoDoubleClick(View v) {            doSomeThing();        }    });}

实现原理:

1. 在View的setOnClickListener中可以看到OnClickListener的对象赋值给了getListenerInfo().mOnClickListener

public void setOnClickListener(@Nullable OnClickListener l) {    if (!isClickable()) {        setClickable(true);    }    getListenerInfo().mOnClickListener = l;}

2. 在View类的performClick()中会调用mOnClickListener.onClick()方法

public boolean performClick() {    final boolean result;    final ListenerInfo li = mListenerInfo;    if (li != null && li.mOnClickListener != null) {        playSoundEffect(SoundEffectConstants.CLICK);        li.mOnClickListener.onClick(this);        result = true;    } else {        result = false;    }    sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);    return result;}

3. 调用View的onClick()后,就会回调NoDoubleClickListener中的onClick()方法,经过按键防抖处理后再回调onNoDoubleClick()方法

更多相关文章

  1. Android中RadioGroup RadioButton CheckBox多选按钮实现方法以及
  2. Android(安卓)各种音量的获取和设置
  3. Android:媒体按键消息
  4. Android中全屏无标题设置
  5. Android之TabHost的几种使用方法
  6. android MVVM ItemViewSelector 实现列表中不同的view类型
  7. Android(安卓)获得当前进程PackageName
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. android+spring boot 选择,上传,下载文件
  2. Android(安卓)删除文件夹(文件夹以及文件
  3. Android 里子线程真的不能刷新UI吗?
  4. Android(安卓)APP中跳转至微信,分享图文给
  5. 【Android】1.6版本所有权限
  6. 利用 ZXing Android Embedded 实现二维码
  7. Android一些开源第三方
  8. Android简单版天气预报,显示天气预报(第二
  9. BroadcastReceiver总结
  10. android 混淆器(ProGuard)