相信大家在开发过程中会遇到这样的问题,如何实现连续多次点击判断
代码实现
package com.purui.mobile.utils
import android.os.SystemClock
class OnClickHelper {
private var count = 5 // 默认连续点击5次
private var hits: LongArray = LongArray(count) //记录点击次数
private var duration: Long = 2000L // 默认有效时间
fun performClick(clickOnCountCallback:()->Unit) {
// 将 hits 数组内所有元素左移一个位置
System.arraycopy(hits, 1, hits, 0, hits.size - 1)
// 获取当前系统已经启动的时间
hits[hits.size - 1] = SystemClock.uptimeMillis()
if (hits[0] >= (SystemClock.uptimeMillis() - duration)) {
// 在有效时间内已经连续点击了 count 次,算一次有效点击
clickOnCountCallback.invoke()
// 将所有时间重置
hits.forEachIndexed { index, _ ->
hits[index] = 0
}
}
}
}
实现原理
如下图所示
代码使用
private val onClickHelper by lazy { OnClickHelper() }
...
binding?.onTitleClick = View.OnClickListener {
onClickHelper.performClick {
// 连续点击5次后执行
}
}