日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android View 事件防抖的兩種方案

瀏覽:35日期:2022-09-19 18:37:34
兩種方案 侵入式防抖處理(NoShakeClickListener) implements View.OnClickListener 無侵入式防抖處理(NoShakeClickListener2) not implements View.OnClickListener侵入式防抖處理(NoShakeClickListener)

1. 既適用于單個View事件防抖, 也適用于Adapter中ItemView事件防抖

2. 如果事件為跳轉到新的Activity, 該Activity啟動模型應為android:launchMode='singleTop'

Java 版本

public abstract class NoShakeClickListener implements View.OnClickListener { private long mTimeInterval = 500L; /** * 最近一次點擊的時間 */ private long mLastClickTime; /** * 最近一次點擊的控件ID */ private int mLastClickViewId; public NoShakeClickListener() { } public NoShakeClickListener(long interval) { this.mTimeInterval = interval; } @Override public void onClick(View v) { final boolean isFastClick = isFastDoubleClick(v, this.mTimeInterval); if (isFastClick) { onFastClick(v); } else { onSingleClick(v); } } /** * 是否是快速點擊 * * @param v 點擊的控件 * @param interval 時間間期(毫秒) * @return true:是,false:不是 */ private boolean isFastDoubleClick(View v, long interval) { int viewId = v.getId(); long nowTime = System.currentTimeMillis(); long timeInterval = Math.abs(nowTime - mLastClickTime); if (timeInterval < interval && viewId == mLastClickViewId) { // 快速點擊事件 return true; } else { // 單次點擊事件 mLastClickTime = nowTime; mLastClickViewId = viewId; return false; } } protected void onFastClick(View v) {} protected abstract void onSingleClick(View v);}

可簡寫為

public abstract class NoShakeListener implements OnClickListener { private long mLastClickTime = 0; private boolean isFastDoubleClick() { long nowTime = System.currentTimeMillis(); if (Math.abs(nowTime - mLastClickTime) < 500) { return true; // 快速點擊事件 } else { mLastClickTime = nowTime; return false; // 單次點擊事件 } } @Override public void onClick(View v) { if (isFastDoubleClick()) { onFastClick(v); } else { onSingleClick(v); } } protected void onFastClick(View v) { } protected abstract void onSingleClick(View v);}Kotlin版本

abstract class NoShakeClickListener @JvmOverloads constructor(interval: Long = 500L) : View.OnClickListener { private var mTimeInterval = 500L private var mLastClickTime: Long = 0 //最近一次點擊的時間 private var mLastClickViewId = 0 //最近一次點擊的控件ID init { mTimeInterval = interval } override fun onClick(v: View) { if (isFastDoubleClick(v, mTimeInterval)) onFastClick(v) else onSingleClick(v) } /** * 是否是快速點擊 * * @param v 點擊的控件 * @param interval 時間間期(毫秒) * @return true:是,false:不是 */ private fun isFastDoubleClick(v: View, interval: Long): Boolean { val viewId = v.id val nowTime = System.currentTimeMillis() val timeInterval = abs(nowTime - mLastClickTime) return if (timeInterval < interval && viewId == mLastClickViewId) { // 快速點擊事件 true } else { // 單次點擊事件 mLastClickTime = nowTime mLastClickViewId = viewId false } } protected open fun onFastClick(v: View?) {} protected abstract fun onSingleClick(v: View?)}

差點忘了... 相應的擴展函數:

fun View?.noShake(block: (v: View?) -> Unit) { this?.apply { setOnClickListener(object : NoShakeClickListener() { override fun onSingleClick(v: View?) {block.invoke(v) } }) }}RxJava2 clickExt.kt

inline fun <T : View> T.noShake(crossinline listener: T.() -> Unit) = this.noShake(1000, listener)inline fun <T : View> T.noShake(windowDuration: Long = 500, crossinline listener : T.() -> Unit) = RxView.clicks(this) .throttleFirst(windowDuration, TimeUnit.MILLISECONDS) .subscribe(object : Observer<Any> { override fun onSubscribe(d: Disposable) {} override fun onError(e: Throwable) {} override fun onComplete() {} override fun onNext(o: Any) {listener() } })無侵入式防抖處理(NoShakeClickListener2)特點:

1 移除了對View.OnClickListener的依賴, 在不破壞原有代碼已設置好的OnClickListener基礎上繼續處理事件防抖;

2 支持簡單處理事件和泛型回調

/** * 事件防抖 * 注: 不僅適用于 View , 其他控件如: MenuItem 同樣適用 * * 1.既適用于單個`View`事件防抖, 也適用于`Adapter`中`ItemView`事件防抖 * 2.如果事件為跳轉到新的`Activity`, 該`Activity`啟動模型應為`android:launchMode='singleTop'` */open class NoShakeClickListener2 @JvmOverloads constructor(interval: Long = 500L) { private var mTimeInterval = 500L private var mLastClickTime: Long = 0 //最近一次點擊的時間 private var mLastClick: Any? = null //最近一次點擊的控件 View or MenuItem ... init { mTimeInterval = interval } fun proceedClick() { if (isFastClick(null, mTimeInterval)) onFastClick(null) else onSingleClick(null) } fun <T> proceedClick(item: T?) { if (isFastClick(item, mTimeInterval)) onFastClick(item) else onSingleClick(item) } /** * 是否是快速點擊 * * @param item 點擊的控件 View or MenuItem ... * @param interval 時間間期(毫秒) * @return true:是,false:不是 */ private fun <T> isFastClick(item: T?, interval: Long): Boolean { val nowTime = System.currentTimeMillis() val timeInterval = abs(nowTime - mLastClickTime) return if (timeInterval < interval && item == mLastClick) { // 快速點擊事件 true } else { // 單次點擊事件 mLastClickTime = nowTime mLastClick = item false } } protected open fun onFastClick(item: Any?) {} protected open fun onSingleClick(item: Any?) {}}實用案例

1 簡單使用

//快速點擊事件val fastClick=object :NoShakeClickListener2(){ override fun onFastClick(item: Any?) { super.onFastClick(item) //此時 item == null Log.e('123', 'onFastClick Click') }}BottomNavigationView.setOnNavigationItemSelectedListener { switchPage(it.itemId) fastClick.proceedClick() true}

2 回傳參數

//快速點擊事件val fastClick=object :NoShakeClickListener2(){ override fun onFastClick(item: Any?) { super.onFastClick(item) //此時 item == null 為 proceedClick(it) 中的 it Log.e('123', 'onFastClick Click') }}BottomNavigationView.setOnNavigationItemSelectedListener { switchPage(it.itemId) fastClick.proceedClick(it) true}

以上就是Android View 事件防抖的兩種方案的詳細內容,更多關于Android View 事件防抖的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久免费国产| 日韩在线短视频| 午夜精品成人av| 四虎国产精品免费观看| 国产日韩高清一区二区三区在线| 久久大逼视频| 爽好多水快深点欧美视频| 天堂网在线观看国产精品| 亚洲大片在线| 最新日韩av| 爽好久久久欧美精品| 亚洲欧美日韩视频二区| 视频一区视频二区中文| 热久久久久久久| 一本色道精品久久一区二区三区| aa国产精品| 欧美在线看片| 国产成人77亚洲精品www| 久久免费黄色| 久久最新视频| 国产亚洲一区| 久久亚洲在线| 亚洲精品福利| 国产一区二区三区久久| 日韩精品麻豆| 影音先锋久久精品| 久久av综合| 欧美日韩亚洲在线观看| 91免费精品国偷自产在线在线| 你懂的国产精品永久在线| 色婷婷色综合| 亚洲综合二区| 精品久久97| 亚洲精品影视| 秋霞影视一区二区三区| 日本亚洲不卡| 国产精品久久久久av电视剧| 老牛国产精品一区的观看方式| 久久久精品国产**网站| 影音国产精品| 国产v日韩v欧美v| 日本不卡视频在线| 99精品视频精品精品视频| 青草国产精品| 日韩在线欧美| 日韩午夜在线| 欧美成a人片免费观看久久五月天| 成人免费电影网址| 国产精品一区2区3区| 男人的天堂亚洲一区| 最新中文字幕在线播放| 亚洲无线观看| 亚洲伦乱视频| 久久av免费| 亚洲一级淫片| 久久精品国产亚洲夜色av网站| 综合一区av| 欧美特黄一级大片| 久久影视三级福利片| 免费的成人av| 日韩电影在线视频| 日韩av电影一区| 亚洲女人av| 午夜日本精品| 成人羞羞视频播放网站| 久久精品人人| 欧美视频久久| 一区二区91| 亚洲少妇诱惑| 精品在线播放| 精品在线播放| 日韩视频精品在线观看| 99视频精品全部免费在线视频| av资源亚洲| 在线一区视频观看| 精品美女在线视频| 国产欧美一区二区精品久久久 | 久久不见久久见免费视频7| 日韩在线卡一卡二| 中文字幕亚洲精品乱码| 亚洲一区二区三区在线免费| 鲁大师成人一区二区三区| 蜜桃成人av| 欧美专区一区二区三区| 亚洲一区二区免费在线观看| 蜜臀av亚洲一区中文字幕| 蜜桃视频一区二区三区| 男女精品网站| 日韩中文字幕亚洲一区二区va在线 | 99国产精品自拍| 一区二区国产精品| 国产亚洲久久| аⅴ资源天堂资源库在线| 亚洲精品一级二级| 视频一区视频二区中文| 久久亚洲精品伦理| 亚洲专区视频| 免费一区二区三区在线视频| 四虎8848精品成人免费网站| 一区福利视频| 国产精品4hu.www| 秋霞影院一区二区三区| 石原莉奈在线亚洲二区| 麻豆成人综合网| 午夜欧美视频| 国产精品一区二区三区美女| 欧美国产美女| 蜜臀av亚洲一区中文字幕| 免费亚洲一区| 亚洲欧美高清| 久久精品国产网站| 一区三区视频| 中文字幕高清在线播放| 蜜桃久久av一区| 丝袜美腿一区| 国产精品xxx在线观看| 欧美aa国产视频| 欧美激情 亚洲a∨综合| 中日韩男男gay无套| 欧美国产偷国产精品三区| 亚洲精品免费观看| 九一国产精品| 欧美成人精品三级网站| 欧美黄色一区二区| 日韩av一级片| 午夜国产欧美理论在线播放| 国产一区一一区高清不卡| 视频在线观看91| 99久久视频| 天堂8中文在线最新版在线| 日韩av二区在线播放| 亚洲精品护士| 少妇精品久久久| 日韩一级网站| 在线综合视频| 日韩亚洲国产欧美| 黄色在线一区| 伊人国产精品| 日韩精品亚洲专区在线观看| 中文字幕av亚洲精品一部二部 | 欧美亚洲二区| 日韩精品一区二区三区中文| 免费视频久久| 亚洲bt欧美bt精品777| 午夜亚洲福利| 视频一区日韩| 国产精品最新| 免费在线播放第一区高清av| 欧美国产不卡| 亚洲精品.com| 一区二区视频欧美| 亚洲综合中文| 亚洲人成毛片在线播放女女| 尹人成人综合网| 久久亚洲风情| 国产亚洲观看| 精品亚洲二区| 999久久久亚洲| 综合亚洲自拍| 日韩二区三区四区| 久久xxx视频| 久久久蜜桃一区二区人| 亚洲深夜福利| 日韩高清三区| 特黄毛片在线观看| 免费欧美在线视频| 国产一区二区三区亚洲综合| 亚洲天堂一区二区| 亚洲欧洲av| 999国产精品999久久久久久| 日韩精品久久理论片| 日本а中文在线天堂| 视频一区视频二区在线观看| 亚洲免费观看高清完整版在线观| 久久亚洲电影| 国产一区二区三区黄网站 | 黄毛片在线观看| 欧美aa国产视频| 欧美特黄视频| 日韩国产91| 久久婷婷久久| 亚洲精品一级| 成人日韩精品| 天堂av在线一区| 精品一区二区三区中文字幕在线| 婷婷亚洲综合| 国产免费播放一区二区| 成人国产精品久久| 亚洲综合国产| 久久香蕉网站| 影音先锋久久精品| 成人午夜网址| 在线亚洲观看| 鲁大师精品99久久久| 亚洲欧洲一区二区天堂久久| 久久久亚洲欧洲日产| 国产精品嫩草99av在线| 精品久久久亚洲| 日韩国产欧美在线视频| 激情丁香综合|