利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)
生活随笔
收集整理的這篇文章主要介紹了
利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
利用Kotlin擴(kuò)展函數(shù)實現(xiàn)View的點擊處理(點擊效果和防止快速點擊)
kotlin經(jīng)典寫法:
view?.setOnClickListener {
//實現(xiàn)
}
項目實踐證明,這種寫法存在問題
例如:項目中有支付功能,發(fā)起支付時會向后臺提交數(shù)據(jù),如果此時用戶手抖(狗頭)就會多次提交,可能創(chuàng)建了2個訂單
優(yōu)化抖動寫法:
val minTime = 500L//這是間隔多少毫秒
var lastTime = 0L
val tmpTime = System.currentTimeMillis()
if (tmpTime - lastTime > minTime) {
lastTime = tmpTime
listener.invoke(this)
} else {
LogZ.d("點擊過快,取消觸發(fā)")
}
再寫成kotlin擴(kuò)展函數(shù)ext.kt:
/***
* 防止快速點擊
*/
fun View.click(listener: (view: View) -> Unit) {
val minTime = 500L
var lastTime = 0L
this.setOnClickListener {
val tmpTime = System.currentTimeMillis()
if (tmpTime - lastTime > minTime) {
lastTime = tmpTime
listener.invoke(this)
} else {
LogZ.d("點擊過快,取消觸發(fā)")
}
}
}
以上是處理點擊抖動
仔細(xì)一看,這里可以拿到View對象,既然這樣,我們可以嘗試在View點擊事件中加點東西
項目中,一般可以點擊的地方都需要點擊效果(置灰改變透明度等),常規(guī)寫法是寫Drawable文件,然后android:background="xxxx"
但是這種寫法很繁瑣,每個不同類型控件都需要寫Drawable然后xml里寫android:background="xxxx",針對不同類型控件處理方法也不一樣,例如:TextView,ImageView,ViewGroup等等
下面可以簡單實現(xiàn)防止點擊抖動+點擊效果(改變alpha只是一種方式,可以自己實現(xiàn)更炫酷的效果)
增加點擊效果ext.kt:
/***
* 防止快速點擊-并且添加按下變暗效果
*/
fun View.click(listener: (view: View) -> Unit) {
val minTime = 500L
var lastTime = 0L
this.setOnClickListener {
val tmpTime = System.currentTimeMillis()
if (tmpTime - lastTime > minTime) {
lastTime = tmpTime
listener.invoke(this)
} else {
LogZ.d("點擊過快,取消觸發(fā)")
}
}
this.setOnTouchListener { view, motionEvent ->
if (motionEvent.action == MotionEvent.ACTION_DOWN) {
view.alpha = 0.7f//這里改變前,可以存儲原view.alpha值,這樣不會影響設(shè)置了alpha的view
Log.d("點擊----","ACTION_DOWN")
} else if (motionEvent.action == MotionEvent.ACTION_UP) {
view.alpha = 1f//存儲了alpha,取出值
Log.d("點擊----","ACTION_UP")
} else if (motionEvent.action == MotionEvent.ACTION_CANCEL) {
view.alpha = 1f
Log.d("點擊----","ACTION_CANCEL")
}
return@setOnTouchListener false
}
}
使用擴(kuò)展函數(shù):
view.click {
//點擊事件
}
:)
總結(jié)
以上是生活随笔為你收集整理的利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟的jQuery源码学习笔记(三)
- 下一篇: JavaScript获取图片的主色调