diff --git a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt index ba89b36f1..6660793ce 100644 --- a/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/treasurefairy/dialog/MyFairySendDialog.kt @@ -15,6 +15,7 @@ import com.yizhuan.erban.ui.utils.load import com.yizhuan.erban.utils.SpannableBuilder import com.yizhuan.xchat_android_core.gift.bean.SimpleUserInfo import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo +import com.yizhuan.xchat_android_library.common.util.ClickUtils.clickWithTrigger class MyFairySendDialog : BaseDialog() { @@ -55,7 +56,7 @@ class MyFairySendDialog : BaseDialog() { binding.tvClose.setOnClickListener { dismissAllowingStateLoss() } - binding.tvSend.setOnClickListener { + binding.tvSend.clickWithTrigger{ if (isSend) { viewModel.sendFairy(fairyInfo.elfId, userInfo.uid) } else { diff --git a/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/ClickUtils.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/ClickUtils.kt new file mode 100644 index 000000000..d959c89e1 --- /dev/null +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/ClickUtils.kt @@ -0,0 +1,76 @@ +package com.yizhuan.xchat_android_library.common.util + +import android.view.View + +object ClickUtils { + /*** + * 设置延迟时间的View扩展 + * @param delay Long 延迟时间,默认600毫秒 + * @return T + */ + fun T.withTrigger(delay: Long = 600): T { + triggerDelay = delay + return this + } + + /*** + * 点击事件的View扩展 + * @param block: (T) -> Unit 函数 + * @return Unit + */ + fun T.click(block: (T) -> Unit) = setOnClickListener { + block(it as T) + } + + /*** + * 带延迟过滤的点击事件View扩展 + * @param delay Long 延迟时间,默认600毫秒 + * @param block: (T) -> Unit 函数 + * @return Unit + */ + fun T.clickWithTrigger(time: Long = 600, block: (T) -> Unit) { + triggerDelay = time + setOnClickListener { + if (clickEnable()) { + block(it as T) + } + } + } + + private var T.triggerLastTime: Long + get() = if (getTag(1123460103) != null) getTag(1123460103) as Long else -601 + set(value) { + setTag(1123460103, value) + } + + private var T.triggerDelay: Long + get() = if (getTag(1123461123) != null) getTag(1123461123) as Long else 600 + set(value) { + setTag(1123461123, value) + } + + private fun T.clickEnable(): Boolean { + var flag = false + val currentClickTime = System.currentTimeMillis() + if (currentClickTime - triggerLastTime >= triggerDelay) { + flag = true + triggerLastTime = currentClickTime + } + return flag + } + + /*** + * 带延迟过滤的点击事件监听,见[View.OnClickListener] + * 延迟时间根据triggerDelay获取:600毫秒,不能动态设置 + */ + interface OnLazyClickListener : View.OnClickListener { + + override fun onClick(v: View?) { + if (v?.clickEnable() == true) { + onLazyClick(v) + } + } + + fun onLazyClick(v: View) + } +} \ No newline at end of file