当前位置: 首页 > news >正文

网站建设公司不给ftp网页设计素材网站推荐

网站建设公司不给ftp,网页设计素材网站推荐,只做早餐的网站,化妆品网页设计模板文章目录 Android 防抖和节流概述工具类使用源码下载 Android 防抖和节流 概述 防抖(Debounce): 防抖是指在事件被触发后,等待一段时间,如果在这段时间内没有再触发事件,才执行处理函数。如果在这段时间内…

文章目录

  • Android 防抖和节流
    • 概述
    • 工具类
    • 使用
    • 源码下载

Android 防抖和节流

概述

  • 防抖(Debounce):
    • 防抖是指在事件被触发后,等待一段时间,如果在这段时间内没有再触发事件,才执行处理函数。如果在这段时间内又触发了事件,就重新开始计时。
    • 场景:适用于频繁触发的事件,如:输入框搜索。
  • 节流(Throttle):
    • 节流是指在一定时间间隔内,无论事件触发多少次,只执行一次处理函数。
    • 场景:适用于限制频率的操作,如:提交按钮。

工具类

object DebounceThrottleUtils {private val handler = Handler(Looper.getMainLooper())private val debounceMap = ConcurrentHashMap<String, Runnable>()private val throttleMap = ConcurrentHashMap<String, Long>()/*** 防抖*  @param key 唯一标识符(建议使用View ID)*  @param delayMillis 防抖时间间隔(毫秒)*  @param block 要执行的操作*/fun debounce(key: String, delayMillis: Long, block: () -> Unit) {// 移除之前的任务debounceMap[key]?.let {handler.removeCallbacks(it)debounceMap.remove(key)}// 创建新任务val runnable = Runnable {block()}debounceMap.put(key, runnable)// 延迟执行任务handler.postDelayed(runnable, delayMillis)}/*** 节流处理* @param key 唯一标识符(建议使用View ID)* @param intervalMillis 节流时间间隔(毫秒)* @param block 要执行的操作*/fun throttle(key: String, intervalMillis: Long, block: () -> Unit) {val now = System.currentTimeMillis()val lastTime = throttleMap[key] ?: 0if (now - lastTime >= intervalMillis) {throttleMap[key] = nowblock()}}/*** 清理指定(在onDestroy中调用)*/fun clear(key: String) {debounceMap[key]?.let {handler.removeCallbacks(it)debounceMap.remove(key)}throttleMap.remove(key)}/*** 清理全部(在onDestroy中调用)*/fun clearAll() {handler.removeCallbacksAndMessages(null)debounceMap.clear()throttleMap.clear()}
}/*** 获取View的key*/
fun View.getKey(): String {return "click_${this.id}"
}/*** 获取EditText的key*/
fun EditText.getKey(): String {return "text_change_${this.id}"
}/*** 防抖扩展方法*/
fun View.clickDebounce(debounceTime: Long = 500L, action: () -> Unit) {val key = getKey()setOnClickListener {DebounceThrottleUtils.debounce(key, debounceTime, action)}
}/*** 节流扩展方法*/
fun View.clickThrottle(throttleTime: Long = 300L, action: () -> Unit) {val key = getKey()setOnClickListener {DebounceThrottleUtils.throttle(key, throttleTime, action)}
}/*** 防抖扩展方法*/
fun EditText.textChangeDebounce(debounceTime: Long = 300L, action: (Editable?) -> Unit) {doAfterTextChanged { editable ->val key = getKey()DebounceThrottleUtils.debounce(key, debounceTime, {action(editable)})}
}

使用

etSearch.textChangeDebounce(debounceTime = 1000L) {Log.e("TAG", "textChange:${it.toString()}")
}
btnSubmit.clickDebounce(debounceTime = 1000L) {Log.e("TAG", "click-debounce-${System.currentTimeMillis()}")
}
btnSubmit2.clickThrottle(throttleTime = 1000L) {Log.e("TAG", "click-throttle-${System.currentTimeMillis()}")
}

源码下载

http://www.dtcms.com/a/451966.html

相关文章:

  • 网站特效代码上那找好爱站网app
  • 网站提交入口汇总临沂网站建设培训班
  • 期末网页设计作业及素材广州seo网站推广平台
  • 优化网站 主题中国建筑业协会
  • 怎么做刷赞网站青岛网站定制开发
  • 中兴能源建设有限公司网站自己做网站可以上传软件下载
  • python 开发手机网站开发文网文许可证
  • 网站页脚包括什么wordpress 3.9 上传
  • 旅游网站建设方建设网站服务器自营方式
  • 免费网站建设市场网络营销专业培训学校
  • 网站的空间租用费wordpress js代码插件
  • wordpress怎么加速优化网站推广排名
  • 17年哪个网站做h5最好win2012服务器网站建设
  • 西安做网站的公司地址建服务网站需要多少钱
  • 网站开发区宿迁房价
  • 做纺织的都用什么网站别人做的网站百度网站验证
  • 在哪下载.net网站作品狮山建网站
  • 汕头市企业网站建设哪家好官方旗舰店
  • 国外网站如何搭建网页wordpress 用oss存储
  • 网站网页进口小城镇建设投稿网站
  • 专注律师微网站建设与律师微信营销6亚圣信息科技做网站怎么样
  • 在浴室里做的网站河南平台网站建设找哪家
  • 全国做网站公司前十名网站建设模板ppt
  • 东莞网站建设相关技术模拟建筑2022手机版
  • 网站关键词锚文本指向谷歌推广方式
  • 云建站优势网站 手机网站
  • 怎么为一个网站做外链网络营销策略研究论文
  • 仿快递网站源码一个网站做多少关键词
  • 辽宁鞍山网站建设烟台网站设计制作公司电话
  • 个人或主题网站建设 实验体会分类信息网站制作