feat: 添加具有防抖效果的自定义 View.OnClickListener 实现,并为 View 添加相关扩展方法

This commit is contained in:
Quyunshuo
2023-03-15 23:51:05 +08:00
parent bc144da9e0
commit c6dddba8e4
2 changed files with 43 additions and 0 deletions

View File

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

View File

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