kotlin 判断连接多次点击事件

107 阅读1分钟

相信大家在开发过程中会遇到这样的问题,如何实现连续多次点击判断

代码实现

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
            }
        }
    }
}

实现原理

如下图所示

image.png

代码使用


private val onClickHelper by lazy { OnClickHelper() }

...
binding?.onTitleClick = View.OnClickListener {
    onClickHelper.performClick {
        // 连续点击5次后执行
    }
}