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?

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.

  • ¿View.setVisibility (View.VISIBLE) obliga a la vista a volver a dibujar incluso si ya es visible?
  • Optimizaciones de Scrollview
  • Reemplazar fragmento dentro de un ViewPager
  • Cómo obtener un elemento de un niño en ExpandableListView?
  • Custom ExpandableListview Android
  • Android doble lista de correo expandible oculta los elementos si la lista es demasiado grande
  • ¿Puedo ejecutar JavaScript sin un WebView, o un WebView puede ejecutarse sin un contexto de actividad, como en un servicio?
  • Carga de CSS móvil si el usuario está en Android
  • ¿Android View.postDelayed referencia de la fuga?
  • Android ExpandableListView no se expande / no se puede hacer clic
  • Cómo agregar cuadros a la imagen?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.