人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

天天滾動(dòng):語(yǔ)言錄制兼容長(zhǎng)按跟點(diǎn)擊錄制

來(lái)源:博客園 | 2023-04-23 00:49:15 |

錄音需求中,往往有兩種常規(guī)操作。

長(zhǎng)按基本實(shí)現(xiàn)流程:

監(jiān)聽(tīng)觸摸事件,按下時(shí)錄制,抬起時(shí)停止。


(相關(guān)資料圖)

點(diǎn)擊基本流程:

點(diǎn)擊開(kāi)始錄制,在次點(diǎn)擊停止錄制

但是凡事有絕對(duì),如果需要同時(shí)支持長(zhǎng)按錄制抬起結(jié)束跟點(diǎn)擊錄制在次點(diǎn)擊結(jié)束呢?面對(duì)如此無(wú)理的需求,從技術(shù)層面上怎么如絲滑般去兼容呢。

需要兩者兼容,只能從觸摸事件入手了,這里的重點(diǎn)其實(shí)就在于怎么在觸摸事件中去區(qū)分點(diǎn)擊事件跟觸摸事件。

功能可能并不難,但是沒(méi)有一個(gè)好的思路,就會(huì)導(dǎo)致代碼邏輯混亂,不好維護(hù),并且代碼過(guò)多,不夠簡(jiǎn)潔。

先看效果圖,前面是點(diǎn)擊事件,后面是觸摸長(zhǎng)按。

首先把開(kāi)始錄制跟結(jié)束方法寫(xiě)好,在觸摸事件里,按下時(shí)錄制,抬起時(shí)結(jié)束,等于是長(zhǎng)按錄制的邏輯

在此基礎(chǔ)上想要兼容點(diǎn)擊邏輯,其實(shí)只要一個(gè)限制就行,那就是點(diǎn)擊的時(shí)間。

正常情況下我點(diǎn)擊后依次經(jīng)歷了按下跟抬起兩個(gè)事件(觸摸不做處理),那我加個(gè)點(diǎn)擊時(shí)間,如果間隔小于800毫秒,就不做處理。

這時(shí)候我點(diǎn)擊只會(huì)觸發(fā)一次按下事件,等我下次點(diǎn)擊時(shí),已經(jīng)超過(guò)了800毫秒,并且可以防止快速點(diǎn)擊,一舉兩得(快速點(diǎn)擊錄制時(shí)長(zhǎng)過(guò)短,需要限制,禁止無(wú)意義操作)。

在回到觸摸邏輯,我點(diǎn)擊錄制,不松手,超過(guò)800毫秒,此時(shí)我在抬起,直接觸發(fā)抬起事件,邏輯如絲滑般柔順。

ivRecord.setOnTouchListener { _, event ->            if (abs(System.currentTimeMillis() - downTimeInMillis) >= 800L) {                when (event.action) {                    MotionEvent.ACTION_DOWN -> {                        start()                    }                    MotionEvent.ACTION_CANCEL,                    MotionEvent.ACTION_UP -> {                        stop()                    }                }            }            true        }

一行 if 判斷,完美兼容兩種錄制模式,簡(jiǎn)單明了。

關(guān)鍵詞: