虛擬鍵盤按下後藍色圖示無法消失

這個問題我大致解釋一下,PointerTracker.java中的setPressedKeyGraphics是控制按下鍵時變藍色的函數,setReleasedKeyGraphics是控制從藍色變回黑色的函數,分別在onDownEventInternal和onUpEventInternal中調用。

當快速用鼠標點擊虛擬鍵盤時,會發生變成藍色沒有變回來的情況,就是這兩個函數沒有匹配地調用導致的。

爲什麼沒有匹配呢?通過log分析來看,setPressedKeyGraphics的key值和setReleasedKeyGraphics的key值沒有對應上。而出現這種情況是因爲:

在快速用鼠標點擊虛擬鍵盤時,

實際上會有先down的事件,然後move的事件,再up這樣的事件發生。正常情況是接收到down事件就去調setPressedKeyGraphics使之變藍,接收move的事件時處理move事件,會掉setReleasedKeyGraphics,因爲你move走了,這個鍵也不應該顯示藍色了。然後移到另一個鍵時,你up了鼠標,所以會處理up事件,此時會判斷是否到新的鍵了,如果是新的鍵,就會setReleasedKeyGraphics新的鍵。但是現在的情況是由於太快速地點擊,中間的move事件沒有處理,沒有調用onMoveEven函數,所以舊的key沒有處理到,直接去處理up事件時新的鍵了。

  所以就會出現快速點擊時,虛擬鍵盤按下後藍色圖示無法消失的現象。解決的辦法可以按照如下:

   在PointerTracker.java中的onUpEventInternal函數裏面,在setReleasedKeyGraphics(keyIndex);前加一句:

setReleasedKeyGraphics(getKeyIndexOn(mKeyX, mKeyY));


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章