中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現物理按鍵的長按事件

發布時間:2021-10-25 11:38:53 來源:億速云 閱讀:231 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么實現物理按鍵的長按事件”,在日常操作中,相信很多人在怎么實現物理按鍵的長按事件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么實現物理按鍵的長按事件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

核心實現代碼如下:

怎么實現物理按鍵的長按事件

有同學可能會說:這樣實現有什么問題嗎?看起來合情合理,用起來也沒問題啊!

是的!從功能實現角度,這樣做是最簡單的,代碼量最少,能立即可用。然而,大家也需要意識到:OnButtonPressed() 和  OnButtonReleased()  是在中斷上下文中調用的!因此,這兩個函數必須快速返回,不能做過于繁重的工作。但是作為框架,這兩個中斷函數又必須調用相應的回調函數。。。這樣子的話,就要求傳入的回調函數必須短小精悍,不能過于繁瑣!!于是,V0.0.1版本的實現短板就凸顯了:當按鍵按下后需要做的處理必須足夠簡單,如果比較復雜和繁瑣,就可能造成系統中斷響應不及時,進而導致系統PANIC重啟!!!

那么有沒有辦法解決這個問題呢?

辦法當然是有的!!既然V0.0.1版本的問題和中斷響應相關,那么可以借鑒Linux內核中的原則和方案:中斷服務程序的執行越快越好,將中斷處理分為兩部分:中斷處理上半部和中斷處理下半部。

解釋:

中斷發生后需要立即調用中斷服務程序進行中斷處理,如果直接在中斷服務程序中做這個處理,那么處理速度必須越快越好!

但是,肯定有一些情況的處理步驟是比較耗時和復雜的,在這種情況下,就可以先把要做的處理工作進行標記(中斷上半部),具體處理步驟在中斷服務程序返回后再完成(中斷下半部)。

是不是感覺很抽象,理解不了了?! 沒關系,我們通過V0.0.2版本的設計實現給大家講解這個方案。

怎么實現物理按鍵的長按事件

上圖中的示例就是DTButton -  V0.0.2的核心實現,現在應該感覺很簡單了吧。嘿嘿!因為是通用框架,所以最終的代碼實現要考慮的東西很多,比上圖中的示例看起來要復雜些。

現在,這個框架比起上一個版本有了很大的改進,并且還擁有了專用的事件處理線程!也正是因為創建了這個線程,所以不能浪費啊,必須多多利用才行。

那么還能用它來干點啥呢???

大家想想,現在能夠捕捉到按鍵的按下事件和釋放事件了!!

那么,如果按下事件和釋放事件之間的時間間隔比較長,那么是不是我們就可以“創造“一個全新的長按事件呢???

答案是肯定的!

按下事件發生后,可以通過事件處理線程進行粗略計時,當計時超過預設的時間間隔(大概2.5秒),即可觸發長按事件,具體表現為長按事件回調函數的調用。

怎么實現物理按鍵的長按事件 

這里需要注意:

1. 長按事件只會觸發一次,即:OnButtonLongPressed() 回調函數只會調用一次

2. 釋放事件觸發時需要停止計時,即:按下事件和釋放事件之間的時間間隔不足2.5秒就不會觸發長按事件

有了上面的分析,大家就可以自己嘗試動手實現了。

什么?覺得麻煩?

沒事!我已經將實現代碼上傳到了文末的附件中,大家可以下載使用和研究,非常歡迎大家的意見和建議。

使用示例如下:

1. 定義按鍵事件回調函數 

怎么實現物理按鍵的長按事件

2. 一鍵注冊,開箱即用

怎么實現物理按鍵的長按事件

運行結果如下: 

怎么實現物理按鍵的長按事件 

到此,關于“怎么實現物理按鍵的長按事件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西盟| 平塘县| 临澧县| 鄂尔多斯市| 泰宁县| 隆回县| 新源县| 遂平县| 托克逊县| 华容县| 贡觉县| 大安市| 鄂伦春自治旗| 疏勒县| 陈巴尔虎旗| 丰都县| 滁州市| 菏泽市| 安康市| 普兰县| 威远县| 长寿区| 边坝县| 襄城县| 广元市| 斗六市| 新兴县| 九台市| 德江县| 梁平县| 东台市| 金昌市| 武汉市| 高雄市| 阿克苏市| 祁阳县| 宜州市| 钟山县| 新津县| 基隆市| 静乐县|