2012-01-31 9 views
19

Supongamos que tengo un Android View que parcialmente está enmascarado por otro View. Por ejemplo, imagine que la vista de enmascaramiento tiene una "ventana" rectangular transparente en el centro de la misma, y ​​mi vista se centra debajo de la ventana y posee dimensiones que son más grandes que las dimensiones de la ventana. En tal caso, una parte rectangular de la vista será visible, mientras que el resto quedará oculto por la máscara.Android: ¿obtiene el área visible de una vista?

Así que mi pregunta es, ¿hay alguna manera fácil de retrive la posición y las dimensiones de la zona visible sin tener ningún acceso a la propia vista de enmascaramiento (así sin saber qué tan grande "ventana" de la propia máscara es)?

intenté llamar getLocalVisibleRect(), que parecía prometedor, pero que sólo parece volver la vista del rectángulo del esquema y no el rectángulo que es realmente visible.

+3

¿Tiene alguna solución para esto? teniendo la misma pregunta .. – user936414

+0

Parece duplicado (pero sin respuestas): http://stackoverflow.com/questions/34724179/how-to-find-whether-an-android-view-is-obscured-by-anyother -vista –

+0

Alguna vez se dio cuenta de esto? – Nima

Respuesta

0

qué no funciona: http://developer.android.com/reference/android/view/View.html#getDrawingRect(android.graphics.Rect)

La documentación dice que hace lo que quiere.

+1

No, da el mismo resultado que llamar 'getWidth()' y 'getHeight()' (es decir, el tamaño total de la vista). Como dice la documentación, 'getDrawingRect()' "rellena el rectángulo de salida con los valores de' getScrollX() ',' getScrollY() ',' getWidth() 'y' getHeight() '". Los valores 'scrollX' y' scrollY' serán 0 en este caso, porque no hay desplazamiento activo. – aroth

10

Esto es bastante tarde para el juego, pero sospecho que getGlobalVisibleRect hace lo que quiere.

+0

gracias! funcionó para mí –

+0

Funciona solo para casos simples, cuando la vista no estaba girada. – aga

+8

Última respuesta, pero getGlobalVisibleRect solo parece calcular la parte visible si la vista está restringida (cortada) por uno de sus padres. No, si otra vista se superpone en algo así como una relación relativa. En ese caso, getGlobalVisibleRect proporciona la rect de toda la vista, no solo la parte descubierta por la vista de enmascaramiento – jacosta

1

He usado el método getWindowVisibleDisplayFrame para determinar si la vista es parcialmente visible o no para determinar si un teclado virtual está abierto. Puedes probarlo.

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