2012-01-31 97 views
19

假設我有一個Android View,被另一個View部分掩蓋。例如,假設遮罩視圖的中央有一個透明的矩形「窗口」,而且我的視圖位於窗口下方,並且尺寸大於窗口的尺寸。在這種情況下,視圖中的某些矩形部分將可見,其餘部分將被遮罩遮擋。Android - 獲取視圖的可見區域?

所以我的問題是,是否有以檢索可見區域的位置和尺寸,而無需掩蔽視圖本身的任何訪問任何直接的方式(所以不知道自己是蒙版的「窗口」有多大)?

我打過電話getLocalVisibleRect(),聽起來很有希望,但似乎只返回該視圖的佈局矩形和,實際上是可見的矩形。

+3

爲此得到了什麼解決方案?有相同的問題.. – user936414 2013-01-22 06:37:31

+0

似乎重複(但沒有答案):http://stackoverflow.com/questions/34724179/how-to-find-whether-an-android-view-is-obscured-by-any-other -view – 2016-07-06 21:46:49

+0

有沒有想過這個? – Nima 2017-07-06 19:14:54

回答

0

這難道不是工作:http://developer.android.com/reference/android/view/View.html#getDrawingRect(android.graphics.Rect

文檔說,這你想要做什麼。

+1

不,它給出了與調用getWidth()和getHeight()(即總視圖大小)相同的結果。正如文檔所述,'getDrawingRect()'「用'getScrollX()','getScrollY()','getWidth()'和'getHeight()'」填充輸出矩形。在這種情況下,'scrollX'和'scrollY'值將爲0,因爲沒有滾動進行。 – aroth 2012-01-31 05:42:24

10

這是比較晚的遊戲,但我懷疑getGlobalVisibleRect做你想做的。

+0

謝謝!它爲我工作 – 2014-03-26 11:27:48

+0

它只適用於簡單的情況下,當視圖不旋轉。 – aga 2015-03-18 08:13:02

+8

最近的回覆,但getGlobalVisibleRect似乎只能計算可見部分,如果視圖被其父母之一限制(切斷)。如果另一個視圖將其覆蓋在某個相關佈局中,則不會。在這種情況下,getGlobalVisibleRect會給出整個視圖的矩形,而不僅僅是遮罩視圖未覆蓋的部分 – jacosta 2015-06-11 14:52:54

1

我已經使用getWindowVisibleDisplayFrame方法來確定視圖是否部分可見或不能確定軟鍵盤是否打開。你可以試試看。

Rect r = new Rect(); 
// r will be populated with the coordinates of  your view 
// that area still visible. 
rootView.getWindowVisibleDisplayFrame(r);