2013-02-17 81 views
2

我有一個鍵盤視圖,當手指離開鍵盤視圖時我需要跟蹤ACTION_MOVE。問題是,一旦它出去,它會停止報告正確的Y值,並在手指位於鍵盤視圖上時持續報告最後的Y值。ACTION_MOVE不報告正確的Y值

對於調試,我只添加了一個簡單的onTouchListener,所以我知道服務的其餘部分不會以任何方式干擾觸摸事件。

setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v("YBugDebug", "getRawY() = "+ event.getRawY()+""); 
      return true; 
     } 
}); 

我一直在調試這幾天,並找不到原因。有什麼建議麼?我嘗試了getY()getRawY(),將偵聽器附加到根視圖。

奇怪的是,Y值在Gingerbread中以及我的ICS設備處於橫向時正確報告。如下所述,該視圖似乎沒有響應懸停事件。

我嘗試將onTouch添加到根視圖,但結果完全相同。真是令人難以置信的是爲什麼它可以檢測到一個移動,但不是它的正確的Y軸。

這裏的問題是怎麼看:

http://oi48.tinypic.com/ehnfqp.jpg

回答

0

我在這方面的專家,但你說的ACTION_MOVE事件您KeyboardView的界限外線發炮?

+0

確實。觸摸事件始於視圖的邊界,當然,然後我將手指移出邊界。這是默認行爲嗎?我嘗試了一個簡單的項目,在其中添加了一個TextView,並報告了正確的Y值,與我的文件夾的位置無關。 – Radovan 2013-02-17 13:58:46

+0

看看你是否可以通過[ACTION_HOVER_EXIT](http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html#onHoverEvent(android.view.MotionEvent))檢測到手指超出界限,此時你基本上可以忽略你所得到的價值。 – JanithaR 2013-02-17 14:10:03

+0

我重寫了onHoverEvent方法來輸出一個消息,只要它的調用,但它似乎永遠不會調用該方法。 – Radovan 2013-02-17 14:26:52

0

甚至在所有屏幕上都能觸摸到的一種方法是用frameLayout包裝整個內容,並在其上使用setOnTouchListener,同時爲其onTouch()方法返回false。

我很確定我已閱讀過類似的替代方法來做到這一點,但我不記得它是什麼。也許使用已經自動擁有的視圖。也許findViewById(R.id.content)或getRootView(),但我不確定他們。

+0

我試圖從getRootView()附加一個onTouch監聽器到RootView,但結果是相同的,我得到ACTION_MOVE,但Y座標不好。我會嘗試frameLayout的東西,但我不知道它將如何與接收應用程序,如果它不會阻止它的輸入。 – Radovan 2013-02-17 23:47:33

+0

如果你返回false,它不應該阻止它背後的任何東西。我很確定沒有創建frameLayout的解決方案。我無法找到我找到的是什麼。 – 2013-02-18 06:54:20

+0

順便說一句,你已經在屏幕截圖中顯示瞭如何通過另一個應用程序捕獲屏幕上的座標的示例。你可以使用它的代碼而不是我寫的東西。它來自開發工具,並且據我所知應該是開源的。 – 2013-02-18 07:00:53