當按鍵來臨時可能會有三種動作:
按鍵的動作狀態可以通過event.getaction()方法來獲取。一般只要down和up兩種行為。
from
當然按鍵也有很多標誌位,可以通過event.getflags()方法來獲取按鍵的標誌位。
在明白了這些之後,在分析按鍵之前首先要是弄清楚按鍵按下時的action,標誌等等
來段程式測試下
@override
public boolean dispatchkeyevent(keyevent event)
比如,短按事件很好說
短按時先是接收到action_down,然後是action_up
那如果是長按的話,log如下
長按是down--down--up然後釋放時會有個up。
所以有了按鍵的action的log之後,就可以自己設計在什麼情況下去做一些按鍵的處理,比如我如果想要在長按按鍵時做乙個操作
那麼可以有三次查詢到該按鍵的機會
第一次,down,重複次數0 ,非長按
第二次,down,重複次數1,長按
第三次,up,重複次數0,長按
這三次事件第二次與第一次差500ms,第三次緊接著第二次出現
明白了按鍵長按狀態下會有什麼標誌就可以選擇何時去處理響應,處理哪乙個。也可以很好的明白為什麼程式裡對按鍵要做那麼複雜
的判斷----是為了定位到某一次,讓滿足條件的事件只要一次。
不同的按鍵也許有不同的action,比如上下鍵左右鍵,如果長按的話會一直down,所以在處理之前先要明白按鍵在長按或者短按情況
下到底是怎麼響應的。
在android原始碼的按鍵處理中,一般是這樣
這也很好理解,比如你想長按做一件事,如果長按要響應up事件的話那就表示使用者一直長按直到抬起up才會有所響應,這樣的話用
戶會很迷茫啊,不知道到底該何時抬起,不知道到底有沒有響應。所以解決辦法就是在使用者按下按鍵的那一刻起即從down開始算,
如果是長按事件並且長按超過了一定時間就去處理。
設計思路就是:
長按事件需要有乙個固定的長按時間去響應,不受使用者長按按鍵時間的長短影響。
短按事件的話本質上響應down和up都可以,但是因為如果判斷條件不多的話有可能down事件來臨時機會觸發長按和短按兩種事件,
所以不如在按鍵最後乙個事件up來的時候再進行處理。
當然如果你的設計有一些特殊的要求,你也可以進行一些設計。
我在設計的時候就遇到了一些問題
問題描述:
假設現在有兩個activity,activitya和activityb,在a介面我需要在長按某個按鍵時進行一些處理。比如長按menu鍵跳轉至activityb,
在activityb介面有對menu鍵抬起後的事件的監聽。我的做法是在介面a中監聽按鍵的down事件判斷是否長按然後進行處理,在處理
結束後返回true,不再往下分發按鍵事件。這就導致乙個現象就是,當我長按menu鍵跳轉至activityb時會觸發在b介面的
menu鍵抬起的事件,可是我只是想對menu鍵短按抬起做乙個處理。
比如上述這個問題,就是對按鍵的事件不太清楚,乙個按鍵流程分為down和up,雖然你在a介面處理了按鍵的長按事件,雖然看似
你返回了true,你返回true僅僅表示該按鍵的down事件你不會往下傳遞,但是你並沒有處理up事件,所以就會導致在介面b響應按鍵
的up事件。
一般的,在按鍵處理或者觸屏處理事件過程中,如果不想把某個事件分發下去,我們都是直接返回true,表示不分發了。其實邏輯上
這個想法是對的。但你需要把整個按鍵事件都攔截掉。不能只攔截down事件卻不攔截up事件。
其實按鍵事件和觸控事件很像,如果你不想往下傳遞某個觸控事件那麼你首先要清楚觸控事件都有哪
些?action_down?action_up?action_move??等等,你需要保證你攔截了事件的最後乙個action,這樣才能真真正正的把事件
給攔截掉。
這是我工作中遇到的問題,幸而有師傅指點,非常感謝~~
電視按鍵事件的處理 2
接著上一章講,此時修改myview的dispatchkeyevent的keydown事件的返回值 override public boolean dispatchkeyevent keyevent event return super.dispatchkeyevent event 執行結果 com....
qt按鍵事件處理機制分析
本為以qt2.3.12作為原始碼進行分析。下面是乙個簡單的顯示乙個按鍵,並將按鍵鏈結到退出操作的程式,本文將一步一步分析,qt是如何實現此操作的。qpushbutton是繼承於qbutton的,我們可以到qbutton.cpp中檢視click 事件是如何產生的。qt2 src widgets qbu...
獲取滑鼠按鍵事件
獲取滑鼠按鍵事件 方法一 最徹底有效的 window.oncontextmenu function 方法二 有缺陷的,不能少alert window.onmousedown function 說明 event.button 0 沒按鍵 event.button 1 按左鍵 event.button ...