2012-01-31 45 views
19

Giả sử tôi có Android View bị che khuất một phần bởi một số View khác. Ví dụ, hãy tưởng tượng rằng chế độ xem mặt nạ có một "cửa sổ" hình chữ nhật trong suốt ở giữa nó và chế độ xem của tôi được đặt ở giữa cửa sổ và có kích thước lớn hơn kích thước của cửa sổ. Trong trường hợp này, một số phần hình chữ nhật của chế độ xem sẽ hiển thị với phần còn lại bị che khuất bởi mặt nạ. Vì vậy, câu hỏi của tôi là, có cách nào đơn giản để lấy lại vị trí và kích thước của vùng hiển thị mà không có có quyền truy cập vào chế độ xem mặt nạ không (không biết cửa sổ "mặt nạ" lớn như thế nào)?Android - Nhận diện tích hiển thị của chế độ xem?

Tôi đã thử gọi getLocalVisibleRect(), có vẻ đầy hứa hẹn, nhưng điều đó dường như chỉ trả lại hình chữ nhật bố cục của chế độ xem và không phải là hình chữ nhật thực sự hiển thị.

+3

có giải pháp nào cho vấn đề này không? có cùng một câu hỏi .. – user936414

+0

Có vẻ trùng lặp (nhưng không có câu trả lời): http://stackoverflow.com/questions/34724179/how-to-find-whether-an-android-view-is-obscured-by-any-other -view –

+0

bao giờ tìm ra điều này? – Nima

Trả lời

0

Điều này không làm việc: http://developer.android.com/reference/android/view/View.html#getDrawingRect(android.graphics.Rect)

Các tài liệu nói rằng nó làm những gì bạn muốn.

+1

Không, nó cho kết quả tương tự như chỉ gọi 'getWidth()' và 'getHeight()' (tức là tổng kích thước xem). Như tài liệu nói, 'getDrawingRect()' "điền vào hình chữ nhật đầu ra với các giá trị từ' getScrollX() ',' getScrollY() ',' getWidth() ', và' getHeight() '". Các giá trị 'scrollX' và' scrollY' sẽ là 0 trong trường hợp này, bởi vì không có cuộn đang diễn ra. – aroth

10

Điều này là khá muộn với trò chơi, nhưng tôi nghi ngờ rằng getGlobalVisibleRect sẽ làm những gì bạn muốn.

+0

cảm ơn! nó làm việc cho tôi –

+0

Nó chỉ hoạt động cho các trường hợp đơn giản, khi chế độ xem không được xoay. – aga

+8

Trả lời trễ, nhưng getGlobalVisibleRect chỉ dường như tính toán phần hiển thị nếu chế độ xem bị hạn chế (bị cắt) bởi một trong các cha mẹ của nó. Không phải nếu một chế độ xem khác chồng lên nó trong một cái gì đó giống như relativelayout. Trong trường hợp đó, getGlobalVisibleRect cung cấp cho rect của toàn bộ khung nhìn, không chỉ phần được phát hiện bởi chế độ xem mặt nạ – jacosta

1

Tôi đã sử dụng phương thức getWindowVisibleDisplayFrame để xác định xem chế độ xem có hiển thị một phần hay không để xác định xem bàn phím mềm có đang mở hay không. Bạn có thể thử nó.

Rect r = new Rect(); 
// r will be populated with the coordinates of  your view 
// that area still visible. 
rootView.getWindowVisibleDisplayFrame(r); 
Các vấn đề liên quan