diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/ViewKtx.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/ViewKtx.kt index 6771caa..b34cbc8 100644 --- a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/ViewKtx.kt +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/ViewKtx.kt @@ -5,6 +5,7 @@ import android.animation.IntEvaluator import android.animation.ValueAnimator import android.view.View import android.view.ViewGroup +import com.quyunshuo.androidbaseframemvvm.base.view.OnSingleClickListener /** * @Author: QuYunShuo @@ -210,4 +211,16 @@ fun View.getViewId(): Int { id = View.generateViewId() } return id +} + +/** + * 给 [View] 设置带有防抖效果的点击事件 + * + * @receiver [View] + * @param delayTime Int 防抖间隔时间,单位是毫秒,默认值 500ms + * @param listener (v: View) -> Unit 具体的点击事件 + * @see OnSingleClickListener + */ +fun View.setOnSingleClickListener(delayTime: Int = 500, listener: (v: View) -> Unit) { + setOnClickListener(OnSingleClickListener(delayTime, listener)) } \ No newline at end of file diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/view/SingleClickListener.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/view/SingleClickListener.kt new file mode 100644 index 0000000..47db33d --- /dev/null +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/view/SingleClickListener.kt @@ -0,0 +1,30 @@ +package com.quyunshuo.androidbaseframemvvm.base.view + +import android.view.View + +/** + * 带有防抖效果的单击监听 + * + * @param mDelayTime Int 防抖间隔时间,单位是毫秒,默认值 500ms + * @param mListener (v: View) -> Unit 具体的点击事件 + * + * @author Qu Yunshuo + * @since 2023/3/15 23:39 + */ +class OnSingleClickListener( + private val mDelayTime: Int = 500, + private val mListener: (v: View) -> Unit +) : View.OnClickListener { + + /** + * 上次有效点击的时间 + */ + private var mLastClickTime = 0L + override fun onClick(v: View) { + val currentTimeMillis = System.currentTimeMillis() + if (currentTimeMillis - mLastClickTime >= mDelayTime) { + mLastClickTime = currentTimeMillis + mListener.invoke(v) + } + } +} \ No newline at end of file