1. Kotlin 扩展函数实现防抖(Kotlin)

1.1创建ViewExtension.kt文件:

fun <T : View> T.withTrigger(delay: Long = 800): T {         triggerDelay = delay    return this}/*** * 点击事件的View扩展 * @param block: (T) -> Unit 函数 * @return Unit */fun <T : View> T.click(block: (T) -> Unit) = setOnClickListener {     //    ClickUtils.applyPressedViewAlpha(this,0.8f)    if (clickEnable()) {             block(it as T)    }}/*** * 带延迟过滤的点击事件View扩展 * @param delay Long 延迟时间,默认800毫秒 * @param block: (T) -> Unit 函数 * @return Unit */fun <T : View> T.clickWithTrigger(time: Long = 800, block: (T) -> Unit) {         // 此处是点击后按钮背景透明度变化 可参考blankj开源工具类//    ClickUtils.applyPressedViewAlpha(this,0.6f)    triggerDelay = time    setOnClickListener {             if (clickEnable()) {                 block(it as T)        }    }}private var <T : View> T.triggerLastTime: Long    get() = if (getTag(1123460103) != null) getTag(1123460103) as Long else 0    set(value) {             setTag(1123460103, value)    }private var <T : View> T.triggerDelay: Long    get() = if (getTag(1123461123) != null) getTag(1123461123) as Long else -1    set(value) {             setTag(1123461123, value)    }private fun <T : View> T.clickEnable(): Boolean {         var flag = false    val currentClickTime = System.currentTimeMillis()    if (currentClickTime - triggerLastTime >= triggerDelay) {             flag = true    }    triggerLastTime = currentClickTime    return flag}}

1.2 如何调用

只要是继承View的控件 即可实现view.clickWithTrigger调用(仅限kotlin)

// 例:Button mBtn = findViewByid(R.id.btn)mBtn.clickWithTrigger{         // 业务逻辑}

2.RxBinding实现防抖(Java)

2.1 添加依赖

implementation "com.jakewharton.rxbinding3:rxbinding:3.0.0"

2.2 如何实现

// 例:RxView.clicks(view)  .throttleFirst(1000L,TimeUnit.MILLISECONDS) // 1秒内只有第一次点击有效      .observeOn(AndroidSchedulers.mainThread())        .subscribe(x -> {      // 业务逻辑      });

更多相关文章

  1. Android平台开发-Power management-电源管理
  2. USB UMS MTP设置过程 (一)
  3. 在Windows下搭建Android开发环境
  4. Android开发环境搭建
  5. Android(安卓)Binder 机制详解
  6. Android(安卓)Launcher全面剖析
  7. Android(安卓)bluetooth介绍(三): 蓝牙扫描(scan)设备分析
  8. android recovery 模式启动进入流程
  9. 箭头函数的基础使用

随机推荐

  1. JDBC原理分析(包括基本的使用方式和面试题
  2. Spring Ioc 实例化 Bean 对象有几种方式?
  3. Springboot实现定时任务
  4. 纳税服务系统总结
  5. array must be initialized with a brace
  6. 冒泡排序就这么简单
  7. Springboot实现文件上传下载
  8. 每日学习-ansible firewalld模块
  9. 整理了一套Servlet面试题
  10. 选择排序就这么简单