android的多按钮的实现原理,防止Android点击按钮过快造成多次事件实现原理

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

public abstract  class  NoDoubleClickListener  implements View.OnClickListener{privatestaticlonglastClickTime =0;publicstaticfinalintMIN_CLICK_DELAY_TIME =700;publicabstractvoidonNoDoubleClick(View view);@OverridepublicvoidonClick(View v) {longcurrentTime = Calendar.getInstance().getTimeInMillis();if(currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {            lastClickTime = currentTime;            onNoDoubleClick(v);        }    }}

3abb0dc6fe9b

mbutton.setOnClickListener(newNoDoubleClickListener() {@OverrideprotectedvoidonNoDoubleClick(View v) {            doSomeThing();        }    });}

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

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

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

publicbooleanperformClick() {finalbooleanresult;finalListenerInfo 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);returnresult;}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值