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
}