¿Puedo obtener la posición x e y de una vista en relación con el diseño raíz de mi actividad en Android?
android
android-layout
coordinates
fhucho
fuente
fuente
La API de Android ya proporciona un método para lograrlo. Prueba esto:
Aquí está el documento
fuente
parentViewGroup
puede ser cualquier padre en la jerarquía de vistas, por lo que también funciona perfectamente para ScrollView.Por favor, use
view.getLocationOnScreen(int[] location);
(ver Javadocs ). La respuesta está en la matriz de enteros (x =location[0]
e y =location[1]
).fuente
Primero obtengo el diseño raíz y luego calculo la diferencia de coordenadas con la vista.
También puedes usar el en
getLocationOnScreen()
lugar degetLocationInWindow()
.fuente
No es necesario calcularlo manualmente.
Simplemente use getGlobalVisibleRect así:
También tenga en cuenta que para las coordenadas del centro, en lugar de algo como:
Solo puedes hacer:
fuente
getGlobalVisibleRect
hace esglobalOffset.set(-mScrollX, -mScrollY);
para que pueda obtener esos valoresgetScollX/Y
si solo necesita las coordenadas relativas.Puedes usar `
; `para obtener la ubicación de su vista correctamente.
Pero hay una trampa si lo usa antes de diseño ha sido inflado obtendrá una posición incorrecta.
La solución a este problema es agregar
ViewTreeObserver
así: -Declare globalmente la matriz para almacenar la posición xy de su vista
y luego agregue
ViewTreeObserver
su diseño principal para obtener una devolución de llamada para la inflación del diseño y solo entonces obtenga la posición de la vista, de lo contrario obtendrá coordenadas xy incorrectasy luego úsalo así
fuente
Escribí dos métodos de utilidad que parecen funcionar en la mayoría de las condiciones, manejo de desplazamiento, traslación y escalado, pero no rotación. Hice esto después de intentar usar offsetDescendantRectToMyCoords () en el marco, que tenía una precisión inconsistente. Funcionó en algunos casos pero dio resultados incorrectos en otros.
"punto" es una matriz flotante con dos elementos (las coordenadas x e y), "ancestro" es un grupo de vista en algún lugar por encima del "descendiente" en la jerarquía del árbol.
Primero, un método que va de coordenadas descendientes a ancestro:
A continuación, el inverso, de antepasado a descendiente:
fuente
En caso de que alguien todavía esté tratando de resolver esto. Así es como obtienes el centro X e Y del
view
.fuente
Acabo de encontrar la respuesta aquí
Dice: Es posible recuperar la ubicación de una vista invocando los métodos getLeft () y getTop (). El primero devuelve la coordenada izquierda o X del rectángulo que representa la vista. Este último devuelve la coordenada superior o Y del rectángulo que representa la vista. Estos dos métodos devuelven la ubicación de la vista en relación con su padre. Por ejemplo, cuando getLeft () devuelve 20, eso significa que la vista se encuentra a 20 píxeles a la derecha del borde izquierdo de su padre directo.
entonces usa:
fuente