最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 處理 View 重復點擊的多種方法

 更新時間:2021年03月19日 08:41:09   作者:louisgeek  
這篇文章主要介紹了Android 處理 View 重復點擊的多種方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下

1、抽象類

//實現(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: 重復點擊");
    }
  }

  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、代理模式

//代理類實現(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;
	//構造
  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: 重復點擊");
    }
  }
}
//使用 
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: 重復點擊");
    }
  }
}

代碼無侵入方式,直接生效了

以上就是Android 處理 View 重復點擊的多種方法的詳細內容,更多關于Android 處理 View 重復點擊的資料請關注腳本之家其它相關文章!

相關文章

  • Android5.0之Activity的轉場動畫的示例

    Android5.0之Activity的轉場動畫的示例

    本篇文章主要介紹了Android5.0之Activity的轉場動畫的示例,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • RxJava入門之介紹與基本運用

    RxJava入門之介紹與基本運用

    對于Android開發(fā)者來說,當有一天打開技術論壇、博客滿屏都是各種Rx的時候,心里是很慌的。所以趁著現(xiàn)在跟著小編通過這篇文章先來簡單認識下RxJava,以及RxJava的基本運用。對這感興趣的朋友下面來一起看看吧。
    2016-09-09
  • Kotlin自定義菜單控件

    Kotlin自定義菜單控件

    這篇文章主要為大家詳細介紹了Kotlin自定義菜單控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android巧用DecorView實現(xiàn)對話框功能

    Android巧用DecorView實現(xiàn)對話框功能

    本篇文章主要介紹了Android巧用DecorView實現(xiàn)對話框功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android編程實現(xiàn)獲取當前系統(tǒng)語言及地區(qū)并更改語言的方法

    Android編程實現(xiàn)獲取當前系統(tǒng)語言及地區(qū)并更改語言的方法

    這篇文章主要介紹了Android編程實現(xiàn)獲取當前系統(tǒng)語言及地區(qū)并更改語言的方法,涉及Android針對系統(tǒng)語言及地區(qū)的獲取與設置相關操作技巧,需要的朋友可以參考下
    2017-10-10
  • Room Kotlin API的使用入門教程

    Room Kotlin API的使用入門教程

    這篇文章主要介紹了Room Kotlin API使用入門教程,幫助大家更好的理解和學習使用并且測試 Room Kotlin API,感興趣的朋友可以了解下
    2021-04-04
  • Android實現(xiàn)未讀消息小紅點顯示實例

    Android實現(xiàn)未讀消息小紅點顯示實例

    大家好,本篇文章主要講的是Android實現(xiàn)未讀消息小紅點顯示實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Android 判斷是否連接成功了指定wifi

    Android 判斷是否連接成功了指定wifi

    本文主要介紹了Android 判斷是否連接成功了指定wifi的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android編程實現(xiàn)自定義Tab選項卡功能示例

    Android編程實現(xiàn)自定義Tab選項卡功能示例

    這篇文章主要介紹了Android編程實現(xiàn)自定義Tab選項卡功能,結合完整實例形式分析了Android自定義tab選項卡的遍歷、設置及屬性操作相關技巧,需要的朋友可以參考下
    2017-02-02
  • 解決MySQL忘記密碼問題的方法

    解決MySQL忘記密碼問題的方法

    這篇文章主要為大家分享了一種解決MySQL忘記密碼問題的方法,MySQL忘記密碼怎么辦,不用著急,小編為大家解答,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論

马山县| 榆社县| 九江市| 长汀县| 平昌县| 织金县| 封丘县| 若尔盖县| 吉水县| 涟源市| 铜鼓县| 泾川县| 固原市| 辽宁省| 凤凰县| 色达县| 新民市| 黄骅市| 姚安县| 墨竹工卡县| 东方市| 周口市| 进贤县| 明光市| 阿克陶县| 新乐市| 马尔康县| 马龙县| 黎川县| 白朗县| 皋兰县| 大竹县| 景洪市| 咸阳市| 读书| 吉木萨尔县| 望谟县| 读书| 通州区| 陈巴尔虎旗| 祁东县|