feat: 添加具有防抖效果的自定义 View.OnClickListener 实现,并为 View 添加相关扩展方法
This commit is contained in:
@ -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))
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user