2012-07-27 123 views
1

我有一個課程正在擴展View,我想使用手寫筆(銀河注)進行輸入,因爲它具有懸停功能。Android onHoverEvent和onTouchEvent

我已經爲懸停和觸摸事件添加了監聽器,但是我有這個問題我無法很好地解決:當我用觸控筆觸摸屏幕時,我生成了一個懸停事件ACTION_HOVER_EXIT和一個觸摸事件ACTION_DOWN

我想知道是否有辦法知道,如果手寫筆開始觸摸屏幕或手指離開屏幕,我會收到ACTION_HOVER_EXIT事件。

同樣是當我舉起手寫筆,但仍然在懸停區:一個ACTION_UP和一個ACTION_HOVER_ENTER

+0

如果它是這樣一個糟糕的問題,我想知道我做錯了什麼,所以我能避免這樣做,在未來。 – Chefire 2012-07-28 08:40:06

回答

3

這是用於Galaxy Note的。

ACTION_HOVER_EXIT事件動作我tryed幾個不同的東西,但沒有成功:

  1. 事件座標(信息getX,的getY) - 有時讓手寫筆時,離屏幕是像0,座標 - 當觸筆開始觸摸屏幕時,146和座標都大於0。
  2. 距離屏幕的距離。觸控筆尖距屏幕的距離有一個軸。通過檢查它是否在0附近,觸筆尖端應該觸摸屏幕。不幸的是Galaxy Note上的手寫筆設備沒有這種能力。
  3. 檢查尖端的壓力。當ACTION_HOVER_EXIT操作的懸停事件分散時,這仍然爲0。

看着存儲在設備中的信息device.toString()我沒有看到兩種情況有什麼不同。但是,通過使用handler.postDelayed()電話,我設法解決了這個問題。基本上,我會在10 ms後執行退出懸停操作,並且僅在此期間沒有觸摸事件失散時才執行。

下面是輸出爲我手寫筆device.toString()

Input Device 5: sec_e-pen 
Keyboard Type: non-alphabetic 
Key Character Map: /system/usr/keychars/Generic.kcm 
Sources: 0x2103 (keyboard mouse) 
AXIS_X: source=0x2002 min=0.0 max=799.8877 flat=0.0 fuzz=0.11234377 
AXIS_Y: source=0x2002 min=0.0 max=1279.8877 flat=0.0 fuzz=0.11234969 
AXIS_PRESSURE: source=0x2002 min=0.0 max=1.0 flat=0.0 fuzz=0.0