feat: 添加具有防抖效果的自定义 View.OnClickListener 实现,并为 View 添加相关扩展方法
This commit is contained in:
@ -5,6 +5,7 @@ import android.animation.IntEvaluator
|
|||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import com.quyunshuo.androidbaseframemvvm.base.view.OnSingleClickListener
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: QuYunShuo
|
* @Author: QuYunShuo
|
||||||
@ -210,4 +211,16 @@ fun View.getViewId(): Int {
|
|||||||
id = View.generateViewId()
|
id = View.generateViewId()
|
||||||
}
|
}
|
||||||
return id
|
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