Cómo obtener las coordenadas absolutas de una vista

Estoy tratando de obtener las coordenadas absolutas de píxeles de la pantalla de la esquina superior izquierda de una vista. Sin embargo, todos los métodos que puedo encontrar, comogetLeft() ygetRight() no funciona, ya que todos parecen ser relativos al padre de la vista, lo que me da0. ¿Cuál es la forma apropiada de hacer esto?

Si ayuda, esto es para un juego de "poner la imagen de nuevo en orden". Quiero que el usuario pueda dibujar un cuadro para seleccionar varias piezas. Mi suposición es que la forma más fácil de hacerlo esgetRawX() ygetRawY() desde elMotionEvent y luego compare esos valores con la esquina superior izquierda del diseño que contiene las piezas. Conociendo el tamaño de las piezas, puedo determinar cuántas piezas se han seleccionado. Me doy cuenta de que puedo usargetX() ygetY() sobre elMotionEvent, pero como eso devuelve una posición relativa que hace que determinar qué piezas se seleccionaron sea más difícil. (No es imposible, lo sé, pero parece innecesariamente complicado).

Editar: este es el código que usé para tratar de obtener el tamaño del contenedor de retención, según una de las preguntas.TableLayout es la mesa que contiene todas las piezas del rompecabezas.

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());

Edición 2: Aquí está el código que he probado, siguiendo más de las respuestas sugeridas.

public int[] tableLayoutCorners = new int[2];
(...)

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
            + ", " + corners.bottom);

cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);

Este código se agregó después de completar toda la inicialización. La imagen se ha dividido en una matriz de ImageViews (la matriz de celdas []) contenida dentro de unTableLayout. Las celdas [0] están arriba a la izquierdaImageView, y elegí celdas [4] ya que está en algún lugar en el medio y definitivamente no debería tener coordenadas de (0,0).

El código que se muestra arriba todavía me da todos los 0 en los registros, lo que realmente no entiendo porque las diversas piezas del rompecabezas se muestran correctamente. (Intenté public int para tableLayoutCorners y la visibilidad predeterminada, ambos dieron el mismo resultado).

No sé si esto es significativo, pero elImageViewOriginalmente no se les da un tamaño. El tamaño de laImageViews se determina durante la inicialización automáticamente por la Vista cuando le doy una imagen para mostrar. ¿Podría esto contribuir a que sus valores sean 0, a pesar de que el código de registro es posterior a que se les haya dado una imagen y se hayan redimensionado automáticamente? Para contrarrestar eso, agregué el códigotableLayout.requestLayout() como se muestra arriba, pero eso no ayudó.