2012-01-31 3 views
19

Предположим, у меня есть Android View, который частично замаскирован другим View. Например, представьте, что маскарадный вид имеет прозрачное прямоугольное «окно» в центре его, а мой взгляд центрирован под окном и имеет размеры, размер которых больше размеров окна. В этом случае будет видна какая-то прямоугольная часть вида, а остальная часть будет скрыта маской.Android - Получите видимую область обзора?

Так что мой вопрос, есть ли простой способ retrive положение и размеры видимой области без имеющей любой доступ к самой точки зрения маскировки (так, не зная, как большой «окно» в маски сама по себе)?

Я пытался дозвониться getLocalVisibleRect(), который звучал многообещающе, но, кажется, только для возврата макета прямоугольник вида по и не прямоугольник, который на самом деле видно.

+3

получил какое-либо решение для этого решения? с тем же вопросом .. – user936414

+0

Кажется дублированным (но без ответов): http://stackoverflow.com/questions/34724179/how-to-find-whether-an-android-view-is-obscured-by-any-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 только кажется, вычисляет видимую часть, если вид ограничен (отключен) одним из его родителей. Нет, если другое представление накладывает его на что-то вроде релятивирования. В этом случае 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); 
Смежные вопросы