日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)

發布時間:2023/12/13 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用Kotlin擴展函數實現View的點擊處理(點擊效果和防止快速點擊)

kotlin經典寫法:

        view?.setOnClickListener { 
            //實現
        }

項目實踐證明,這種寫法存在問題

例如:項目中有支付功能,發起支付時會向后臺提交數據,如果此時用戶手抖(狗頭)就會多次提交,可能創建了2個訂單

優化抖動寫法:

val minTime = 500L//這是間隔多少毫秒
var lastTime = 0L
val tmpTime = System.currentTimeMillis()
        if (tmpTime - lastTime > minTime) {
            lastTime = tmpTime
            listener.invoke(this)
        } else {
            LogZ.d("點擊過快,取消觸發")
        }

再寫成kotlin擴展函數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("點擊過快,取消觸發")
        }
    }
}

以上是處理點擊抖動

仔細一看,這里可以拿到View對象,既然這樣,我們可以嘗試在View點擊事件中加點東西

項目中,一般可以點擊的地方都需要點擊效果(置灰改變透明度等),常規寫法是寫Drawable文件,然后android:background="xxxx"

但是這種寫法很繁瑣,每個不同類型控件都需要寫Drawable然后xml里寫android:background="xxxx",針對不同類型控件處理方法也不一樣,例如:TextView,ImageView,ViewGroup等等

下面可以簡單實現防止點擊抖動+點擊效果(改變alpha只是一種方式,可以自己實現更炫酷的效果)

增加點擊效果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("點擊過快,取消觸發")
        }
    }
    this.setOnTouchListener { view, motionEvent ->
        if (motionEvent.action == MotionEvent.ACTION_DOWN) {
            view.alpha = 0.7f//這里改變前,可以存儲原view.alpha值,這樣不會影響設置了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
    }
}

使用擴展函數:

view.click {
  //點擊事件 }

:)

總結

以上是生活随笔為你收集整理的利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。