Android_这点事_去除按键抖动

为View增加抖动过滤的扩展函数

在开发过程中,我们在相应View的点击事件的时候会出现连续两次点击的情况,从而使响应的处理两次甚至多次,为此我们需要为View做一个连续两次点击的过滤操作,代码用Kotlin开发,作为View的扩展方法,代码如下

//设置当前时间
const val TAG_LAST_TIME = 999999999
private var <T : View> T.triggerLastTime: Long
    get():Long {
        if (getTag( TAG_LAST_TIME) != null) {
            return getTag(TAG_LAST_TIME) as Long
        }
        return 0L

    }
    set(value) {
        setTag(TAG_LAST_TIME, value)
    }
//设置延时时间
const val TAG_TRIGGER_DELAY = 888888888
private var <T : View> T.triggerDelay: Long
    get():Long{
        if (getTag(TAG_TRIGGER_DELAY) != null){
            return getTag(TAG_TRIGGER_DELAY) as Long
        }
        return 0L
    }
    set(value) {
        setTag(TAG_TRIGGER_DELAY, 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
}

//-----延时点击--End-----

过滤第三方View中的抖动点击事件

在开发过程中,有时候我们会引用一些第三方的View组件,我们无法修改相关的代码,为此需要制作出一个通用的过滤快速点击的一些方法。其代码如下(作为Context)的扩展函数

var mClickTime = 0L
fun Context.checkDoubleStart(default:Int=800):Boolean{
    var result = true
    val curTiem = SystemClock.uptimeMillis()
    if (mClickTime + default <= curTiem) {
        // 检查不通过
        result = false
    }
    mClickTime = curTiem
    return result
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值