自定义一个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将Uri转化为文件路径的方法
  3. android HTTP post方法时,如何使用cookies
  4. Android NDK之----- C调用Java [GetMethodID方法的使用]
  5. Android Support Multidex原理分析
  6. 一些常用SD卡操作的方法,APk管理之类的方法
  7. android 文件保存方法 sd卡中或系统
  8. 【Android】Zip文件解压方法
  9. Android显示GIF动画的几种方法

随机推荐

  1. android 手势识别例子
  2. Android(安卓)4.0原生SDK发布,引入新的流
  3. Android(安卓)APK文件在电脑上面运行方法
  4. 从头学Android之Android的数据存储--SQLi
  5. Android深入浅出自定义控件(一)
  6. android AIDL服务
  7. Android之Adapter用法总结
  8. 史上最全的android开源项目框架大全
  9. Android中的资源与国际化!
  10. android 工程中重新生成gen文件夹或R.jav