简单的View的点击拓展方法,防抖和双击。

一些常量:

object ViewClickDelay {
    var hash: Int = 0
    var lastClickTime: Long = 0
    var SPACE_TIME: Long = 600
    var DOUBLE_TIME: Long = 500
}

防止多次点击:防抖

fun View.setOnClickDelay(clickAction: (View) -> Unit) {
    this.setOnClickListener {
        try {
        	//第一次进来肯定不一样,走这里
            if (this.hashCode() != hash) {
                hash = this.hashCode()
                lastClickTime = System.currentTimeMillis()
                clickAction(it)
            } else {
            	//第二次走这里
                val currentTime = System.currentTimeMillis()
                //间隔多久SPACE_TIME自己设置
                if (currentTime - lastClickTime > SPACE_TIME) {
                    lastClickTime = currentTime
                    clickAction(it)
                }
            }
        } catch (e: Throwable) {
            e.printStackTrace()
            clickAction(it)
        }
    }
}
/**
 * 监听 View 的双击事件
 * @param doubleClick 双击事件回调
 */
fun View.setOnDoubleClickListener(doubleClick: (View) -> Unit) {
    this.setOnClickListener {
        val currentTime = System.currentTimeMillis()
        //如果用户第一次点击其它View,给lastClickTime 赋值,然后再点击进来当前,
        //是可以直接触发双击的,但是一般是不可能出现的。
        //lastClickTime 是工具类共用的,你也可以单独给这个方法定义一个常量。
        //或者像防抖哪里给添加一个  if (this.hashCode() != hash) {判断
        if (currentTime - lastClickTime < DOUBLE_TIME) {
            lastClickTime = 0
            doubleClick(it)
        } else {
            lastClickTime = currentTime
        }
    }
}

之前看过滑动辅助工具类里面的双击源码,是通过给handler发送一个延迟300毫秒的事件来确认在这中间是否触发了两次,以此来判断是否是双击,上面的双击方法其实是可以正常去使用的,所谓的bug基本不可能出现,而且出现了问题也不大,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值