Los métodos getTop (), getLeft (), getX (), getY (), getWidth (), getHeight () de la vista de Android

Estoy escribiendo una aplicación de arrastrar y soltar y tengo muy confundido debido a algunos parámetros.

Por favor ayuda a averiguar.

En primer lugar, leí la documentación de la clase View y obtuve las siguientes explicaciones.

getX() : The visual x position of this view, in pixels.

getY() : The visual y position of this view, in pixels.

getWidth() : Return the width of the your view.

getHeight() : Return the width of the your view.

getTop() : Top position of this view relative to its parent.

getLeft() : Left position of this view relative to its parent.

Ahora cuando terminamos con la documentación oficial, veamos qué tenemos.

Tengo una imagen con el tamaño original 500x500 llamado círculo.

Introduzca aquí la descripción de la imagen

Y aquí está la captura de pantalla real de mi aplicación

Introduzca aquí la descripción de la imagen

Aquí está el xml para el diseño

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <ImageView android:id="@+id/imageView1" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/circle" /> </LinearLayout> 

Ahora lo que me preocupa. Cuando veo a mi gente, obtengo lo siguiente, lo que realmente me confunde.

Introduzca aquí la descripción de la imagen

No veo ningún problema con las getX() y getY() , porque en realidad me muestran dónde empieza la imagen.

Como dice la documentación, los getWidth() y getHeight devuelven el ancho y la altura de la vista, pero la ventana de reloj me dice que mi getWidth() y getHeight son 300, lo cual realmente no puedo entender, porque en mi XML, Los he fijado 100dp cada uno, así que las funciones me devuelven ellos en una medida diferente, y cómo lo convierto a dp.

Y finalmente, me dice que getTop() y getLeft son 700 y 300, y como dice la documentación, son la posición de la imagen relativa a su padre. ¿Pero no es mi padre el diseño lineal, así que qué significan estos números en el sentido de la colocación de la pantalla?

2 Solutions collect form web for “Los métodos getTop (), getLeft (), getX (), getY (), getWidth (), getHeight () de la vista de Android”

Todos estos métodos de medición devuelven tamaños en píxeles ( px ), no píxeles de densidad ( dp ). Si desea convertirlo, puede obtener la densidad llamando a:

 float density = getResources().getDisplayMetrics().density; 

Y luego divida los valores que obtiene con la densidad proporcionada, por ejemplo:

 int widthDp = (int)(img.getWidth() / density); 

Puede obtener píxeles de dp con

 float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics()); float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics()); 

A partir de la pregunta de posicionamiento. getTop y getLeft son valores relativos y se basan en su padre. Dado que el único padre de su ImageView es LinearLayout , está posicionando efectivamente su ImageView directamente debajo de la ActionBar ToolBar / ActionBar ToolBar

También no utilice una imagen para un círculo, usted puede dibujarla fácilmente con canvas.drawCircle toma mucho menos memoria.

  • Softkey superposición con el campo EditText
  • Diferencia entre OnTouchListener y OnClickListener
  • Vista de Android WebView
  • SetBackground vs setBackgroundDrawable (Android)
  • Cómo obtener el nombre de la imagen de ImageView en Android?
  • MPandroidChart: permite acercar y alejar los valores sólo en el eje Y
  • Detección de vistas invisibles en un evento de movimiento
  • ¿Cómo puedo forzar un sitio a escala para fijar para móviles (Iphone android ..)
  • Cómo usar una misma fontface personalizada para toda la vista en android?
  • Cómo desplegar una parte de la imagen en android
  • Animación giratoria androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.