Android 處理 View 重復(fù)點(diǎn)擊的多種方法
更新時(shí)間:2021年03月19日 08:41:09 作者:louisgeek
這篇文章主要介紹了Android 處理 View 重復(fù)點(diǎn)擊的多種方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
1、抽象類
//實(shí)現(xiàn) View.OnClickListener 接口
public abstract class OnThrottleClickListener implements View.OnClickListener {
private static final String TAG = "OnThrottleClickListener";
private static final int SKIP_DURATION = 300;//milliseconds
private long mLastClickTime;
@Override
public void onClick(View v) {
if (System.currentTimeMillis() - mLastClickTime > SKIP_DURATION) {
onThrottleClick(v);
mLastClickTime = System.currentTimeMillis();
} else {
Log.e(TAG, "OnThrottleClickListener: 重復(fù)點(diǎn)擊");
}
}
protected abstract void onThrottleClick(View v);
}
//代替 new View.OnClickListener() 使用
id_tv_1.setOnClickListener(new OnThrottleClickListener() {
@Override
protected void onThrottleClick(View v) {
Log.e(TAG, "onClick: OnThrottleClickListener ");
}
});
2、代理模式
//代理類實(shí)現(xiàn) View.OnClickListener 接口
public class ThrottleClickProxy implements View.OnClickListener {
private static final String TAG = "ThrottleClickProxy";
private static final int SKIP_DURATION = 300;//milliseconds
private long mLastClickTime;
//源對象
private View.OnClickListener mOriginListener;
//構(gòu)造
public ThrottleClickProxy(View.OnClickListener mOriginListener) {
this.mOriginListener = mOriginListener;
}
@Override
public void onClick(View v) {
if (System.currentTimeMillis() - mLastClickTime >= SKIP_DURATION) {
mOriginListener.onClick(v);
mLastClickTime = System.currentTimeMillis();
} else {
Log.e(TAG, "ThrottleClickProxy: 重復(fù)點(diǎn)擊");
}
}
}
//使用
id_tv_2.setOnClickListener(new ThrottleClickProxy(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG, "onClick: ThrottleClickProxy ");
}
}));
3、RxAndroid 之 RxBinding
implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha1'
RxView.clicks(id_tv_3)
.throttleFirst(300, TimeUnit.MILLISECONDS)
.subscribe(new Consumer<Unit>() {
@Override
public void accept(Unit unit) throws Exception {
Log.e(TAG, "onClick: throttleFirst ");
}
});
4、AOP 之 Eclipse AspectJ
//采用 AspectJX 來快速配置 Eclipse AspectJ
//project
dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
//add
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
}
plugins {
id 'com.android.application'
//add
id 'android-aspectjx'
}
//module
dependencies {
//add
implementation 'org.aspectj:aspectjrt:1.9.5'
}
@Aspect
public class ThrottleClickAspect {
private static final String TAG = "ThrottleClickAspect";
private static final int SKIP_DURATION = 3000;
private long mLastClickTime;
//所有的 android.view.View.OnClickListener.onClick 方法都會被織入,像第三方組件 RxView.clicks() 里也會
@Around("execution(* android.view.View.OnClickListener.onClick(..))")
public void aroundViewOnClick(ProceedingJoinPoint joinPoint) throws Throwable {
if (System.currentTimeMillis() - mLastClickTime >= SKIP_DURATION) {
joinPoint.proceed();
mLastClickTime = System.currentTimeMillis();
} else {
Log.e(TAG, "ThrottleClickAspect: 重復(fù)點(diǎn)擊");
}
}
}
代碼無侵入方式,直接生效了
以上就是Android 處理 View 重復(fù)點(diǎn)擊的多種方法的詳細(xì)內(nèi)容,更多關(guān)于Android 處理 View 重復(fù)點(diǎn)擊的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- Android開發(fā)教程之如何屏蔽View的重復(fù)點(diǎn)擊
- Android中如何優(yōu)雅的處理重復(fù)點(diǎn)擊實(shí)例代碼
- Android中AOP的應(yīng)用實(shí)踐之過濾重復(fù)點(diǎn)擊
- Android優(yōu)雅地處理按鈕重復(fù)點(diǎn)擊的幾種方法
- Android防止按鈕重復(fù)點(diǎn)擊示例代碼
- Android 防止多次重復(fù)點(diǎn)擊的三種方法的示例
- Android 快速實(shí)現(xiàn)防止網(wǎng)絡(luò)重復(fù)請求&按鈕重復(fù)點(diǎn)擊的方法
- Android之有效防止按鈕多次重復(fù)點(diǎn)擊的方法(必看篇)
- 實(shí)例詳解Android解決按鈕重復(fù)點(diǎn)擊問題
- Android如何優(yōu)雅的處理重復(fù)點(diǎn)擊
相關(guān)文章
Android5.0之Activity的轉(zhuǎn)場動畫的示例
本篇文章主要介紹了Android5.0之Activity的轉(zhuǎn)場動畫的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10
Android巧用DecorView實(shí)現(xiàn)對話框功能
本篇文章主要介紹了Android巧用DecorView實(shí)現(xiàn)對話框功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Android編程實(shí)現(xiàn)獲取當(dāng)前系統(tǒng)語言及地區(qū)并更改語言的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取當(dāng)前系統(tǒng)語言及地區(qū)并更改語言的方法,涉及Android針對系統(tǒng)語言及地區(qū)的獲取與設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Android實(shí)現(xiàn)未讀消息小紅點(diǎn)顯示實(shí)例
大家好,本篇文章主要講的是Android實(shí)現(xiàn)未讀消息小紅點(diǎn)顯示實(shí)例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02
Android編程實(shí)現(xiàn)自定義Tab選項(xiàng)卡功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義Tab選項(xiàng)卡功能,結(jié)合完整實(shí)例形式分析了Android自定義tab選項(xiàng)卡的遍歷、設(shè)置及屬性操作相關(guān)技巧,需要的朋友可以參考下2017-02-02

