Posso obter a posição x e y de uma visualização em relação ao layout raiz da minha atividade no Android?
android
android-layout
coordinates
fhucho
fonte
fonte
A API do Android já fornece um método para conseguir isso. Tente o seguinte:
Aqui está o documento
fonte
parentViewGroup
pode ser qualquer pai na hierarquia da exibição, portanto funciona perfeitamente para o ScrollView também.Por favor, use
view.getLocationOnScreen(int[] location);
(consulte Javadocs ). A resposta está na matriz inteira (x =location[0]
e y =location[1]
).fonte
Primeiro, obtenho o layout raiz e depois calculo a diferença de coordenadas com a visualização.
Você também pode usar o em
getLocationOnScreen()
vez degetLocationInWindow()
.fonte
Não há necessidade de calculá-lo manualmente.
Basta usar getGlobalVisibleRect assim:
Observe também que, para as coordenadas do centro, em vez de algo como:
Você pode apenas fazer:
fonte
getGlobalVisibleRect
faz églobalOffset.set(-mScrollX, -mScrollY);
que você possa obter esses valoresgetScollX/Y
se precisar apenas dos coordenados relativos.Você pode usar `
; `para obter a localização da sua visualização corretamente.
Mas há uma captura , se você usá-lo antes layout foi inflado você receberá posição errada.
A solução para este problema está adicionando
ViewTreeObserver
assim: -Declare globalmente a matriz para armazenar a posição xy da sua visualização
e adicione
ViewTreeObserver
seu layout pai para obter retorno de chamada para inflação do layout e só então buscar a posição da vista, caso contrário, você obterá coordenadas xy erradase depois use assim
fonte
Escrevi para mim dois métodos utilitários que parecem funcionar na maioria das condições, lidando com rolagem, tradução e redimensionamento, mas não rotação. Fiz isso depois de tentar usar o offsetDescendantRectToMyCoords () na estrutura, que tinha precisão inconsistente. Funcionou em alguns casos, mas deu resultados errados em outros.
"point" é uma matriz flutuante com dois elementos (as coordenadas x e y), "ancestral" é um grupo de visualização em algum lugar acima do "descendente" na hierarquia da árvore.
Primeiro, um método que vai das coordenadas descendentes ao ancestral:
Em seguida, o inverso, do ancestral ao descendente:
fonte
Caso alguém ainda esteja tentando descobrir isso. É assim que você obtém o centro X e Y do
view
.fonte
Acabei de encontrar a resposta aqui
Ele diz: É possível recuperar a localização de uma exibição invocando os métodos getLeft () e getTop (). O primeiro retorna a coordenada esquerda, ou X, do retângulo que representa a vista. O último retorna a coordenada superior, ou Y, do retângulo que representa a vista. Esses métodos retornam o local da visualização em relação ao pai. Por exemplo, quando getLeft () retorna 20, isso significa que a exibição está localizada 20 pixels à direita da borda esquerda de seu pai direto.
então use:
fonte