2012-01-31 15 views
19

Viewによって部分的にマスクされているAndroid Viewがあるとします。たとえば、マスキングビューの中央に透明な長方形の「ウィンドウ」があり、ウィンドウの下にセンタリングされ、ウィンドウのサイズより大きなディメンションを持つビューがあるとします。このような場合、ビューの一部の矩形部分が表示され、残りはマスクによって覆い隠されます。Android - ビューの表示領域を取得しますか?

の位置と大きさを取得する簡単な方法はありますか?はマスクビュー自体にアクセスできません(マスクの「ウィンドウ」自体の大きさはわかりません)。

私は有望なと思ったが、ビューのレイアウト矩形を返すように見えて、ではなく、実際に見える矩形であるを呼び出してみました。

+3

この回答は役に立ちましたか?同じ質問をしています。 – user936414

+0

重複しているようですが(回答なし):http://stackoverflow.com/questions/34724179/how-to-find-whether-an-android-view-is-obscured-by-any-other-other -view –

+0

これを今まで考え出しましたか? – Nima

答えて

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

10

これはゲームにかなり遅れていますが、私はgetGlobalVisibleRectがあなたの望むことをしていると思います。

+0

ありがとう!それは私のために働いた –

+0

それは、ビューが回転されていないときだけ、単純なケースで動作します。 – aga

+8

遅く返信されますが、getGlobalVisibleRectは、ビューがその親の1つによって制限(カットオフ)されている場合にのみ可視部分を計算するようです。他のビューがそれを相対類似のようなものにオーバーレイしているのではない。その場合、getGlobalVisibleRectは、マスキングビューで覆われていない部分だけでなく、全体のビューの四角形を返します – jacosta

1

私はgetWindowVisibleDisplayFrameメソッドを使用して、ビューが部分的に表示されているかどうかを判断し、ソフトキーボードが開いているかどうかを判断しました。あなたはそれを試すことができます。

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