2012-05-28 24 views
1

我的問題與onTouch有關。據我所知,無法爲一個視圖檢測ACTION_DOWN,並且無法在同一個onTouch事件或刷卡上檢測另一個視圖的ACTION_UP,因爲每個onTouch事件都鏈接到一個視圖。如何在沒有ACTION_DOWN和ACTION_UP的情況下檢測類似Draglike的行爲

我有一些圖形的視圖(A),並且在EVENT_DOWN上檢測到座標,並創建一個由包含更多視圖(「按鈕」)的視圖(B)組成的「彈出」。 B的位置和大小可能會隨時變化。我寧願在B的一個孩子(「按鈕」)上檢測ACTION_UP。

我想用onInterceptTouchEvent並不好。畢竟,B不是A的父母。它的另一種方式。

使用androids拖放功能似乎有點太多。看起來它是用於實際拖動圖形和傳輸數據。拖動不可見的圖形來檢測離開屏幕的手指不是很優雅。

另一種方法是檢測B的孩子的位置(和大小),每次顯示彈出窗口時,但也不是很平滑。

什麼是檢測視圖A的ACTION_DOWN,然後是它的子B(或它的孩子)ACTION_UP的最佳方式是什麼?

還有其他方法來檢測這些事件嗎?

回答

0

我確實與一兩天非常相似的事情發生過爭執,我終於得出結論,據我所知onInterceptTouchEvent是唯一的出路。我剛剛爲A和B創建了一個容器視圖'C',然後當A收到ACTION_DOWN時,我指示'C'截取滑動中的所有其他事件,根據B的已知位置測試座標,然後將事件轉發給'B'通過一個自定義的方法,如果ACTION_UP對B的邊界測試爲正(小心手動將MotionEvents從一個類傳遞到另一個類,因爲座標將全部錯誤)。

不是一個非常令人滿意的解決方案,但它是我能想到的唯一的事情。

另外,萬一你在使用它,android 3.0+有一些拖/放幫助器方法,我敢肯定是非常有幫助的,雖然我爲2.x開發,所以他們對我來說沒用。

+0

謝謝。我會考慮你的解決方案。我還沒有決定什麼minSdkVersion去。 (我在下載和安裝SDK並獲取模擬器運行時遇到了一些麻煩,所以我通過手機上的USB測試了我的應用程序和最低SDK 15!) – Aikheel

相關問題