Como obter as coordenadas absolutas de uma visualização

Estou tentando obter as coordenadas absolutas de pixels da tela no canto superior esquerdo de uma visualização. No entanto, todos os métodos que posso encontrar, comogetLeft() egetRight() não funcionam, pois todos parecem ser relativos ao pai da vista, dando-me assim0. Qual é a maneira correta de fazer isso?

Se ajudar, isso é para um jogo de 'colocar a foto de volta em ordem'. Quero que o usuário possa desenhar uma caixa para selecionar várias peças. Minha suposição é que a maneira mais fácil de fazer isso égetRawX() egetRawY() deMotionEvent e compare esses valores com o canto superior esquerdo do layout que contém as peças. Conhecendo o tamanho das peças, posso determinar quantas peças foram selecionadas. Eu percebo que posso usargetX() egetY() noMotionEvent, mas como isso retorna uma posição relativa que dificulta a determinação de quais peças foram selecionadas. (Não é impossível, eu sei, mas parece desnecessariamente complicado).

Edit: Este é o código que eu usei para tentar obter o tamanho do contêiner de retenção, conforme uma das perguntas.TableLayout é a mesa que contém todas as peças do quebra-cabeça.

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

Edit 2: Aqui está o código que eu tentei, seguindo mais das respostas 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 foi adicionado após toda a inicialização. A imagem foi dividida em uma matriz de ImageViews (a matriz de células []) contida em umTableLayout. As células [0] são o canto superior esquerdoImageView, e eu escolhi as células [4], pois está em algum lugar no meio e, definitivamente, não deve ter coordenadas de (0,0).

O código mostrado acima ainda me dá todos os 0s nos logs, o que eu realmente não entendo porque as várias peças do quebra-cabeça são exibidas corretamente. (Tentei public int para tableLayoutCorners e visibilidade padrão, ambos dando o mesmo resultado.)

Não sei se isso é significativo, mas oImageViews originalmente não recebem um tamanho. O tamanho doImageViews é determinado durante a inicialização automaticamente pelo modo de exibição quando eu mostro uma imagem a ser exibida. Isso poderia contribuir para que seus valores fossem 0, mesmo que o código de registro ocorra depois de receberem uma imagem e se redimensionarem automaticamente? Para potencialmente combater isso, adicionei o códigotableLayout.requestLayout() como mostrado acima, mas isso não ajudou.