¿Cómo obtener el ancho y alto de un android.widget.ImageView?

╔══════════════════════════════════════════════╗ ^ ║ ImageView ╔══════════════╗ ║ | ║ ║ ║ ║ | ║ ║ Actual image ║ ║ | ║ ║ ║ ║ |60px height of ImageView ║ ║ ║ ║ | ║ ║ ║ ║ | ║ ╚══════════════╝ ║ | ╚══════════════════════════════════════════════╝  90px width of ImageView 

Tengo una vista de imagen con algunas alturas y anchos predeterminados, las imágenes se almacenan en db y quiero escalar la imagen de acuerdo con el ancho de altura de la vista de imagen. Como no quiero dar valores por defecto porque cada vez que cambio su altura y ancho también tengo que cambiarlo en el código.

Estoy tratando de obtener el alto y el ancho de ImageView, pero me devuelven 0 en ambos casos.

 int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight(); 

esto me devuelve 0 incluso tiene altura y ancho predeterminados

Mi respuesta sobre esta pregunta podría ayudarte:

 int finalHeight, finalWidth; final ImageView iv = (ImageView)findViewById(R.id.scaled_image); final TextView tv = (TextView)findViewById(R.id.size_label); ViewTreeObserver vto = iv.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { iv.getViewTreeObserver().removeOnPreDrawListener(this); finalHeight = iv.getMeasuredHeight(); finalWidth = iv.getMeasuredWidth(); tv.setText("Height: " + finalHeight + " Width: " + finalWidth); return true; } }); 

Luego puede agregar su trabajo de escala de imagen desde el método onPreDraw ().

Acabo de establecer esta propiedad y ahora el sistema operativo Android se está ocupando de todo.

android: adjustViewBounds = “true”

Use esto en su layout.xml donde ha plantado su ImageView: D

Pude obtener el ancho y alto de la imagen por su dibujo;

 int width = imgView.getDrawable().getIntrinsicWidth(); int height = imgView.getDrawable().getIntrinsicHeight(); 

La razón por la que las dimensiones de ImageView son 0 es porque cuando las está consultando, la vista aún no ha realizado el diseño y no mide los pasos. Solo le dijo a la vista cómo se “comportaría” en el diseño, pero aún no calculó dónde colocar cada vista.

¿Cómo decides el tamaño para dar a la vista de la imagen? ¿No puedes simplemente usar una de las opciones de escalado implementadas de forma nativa?

Publicar en el hilo de la interfaz de usuario funciona para mí.

 final ImageView iv = (ImageView)findViewById(R.id.scaled_image); iv.post(new Runnable() { @Override public void run() { int width = iv.getMeasuredWidth(); int height = iv.getMeasuredHeight(); } }); 

Creo que puedes dejar que el sistema operativo Android se encargue de esto por ti. Establezca el tipo de escala en ImageView para fitXY y la imagen que visualiza se dimensionará para ajustarse al tamaño actual de la vista.

  

su archivo xml:

   

su archivo java:

 ImageView imageView = (ImageView)findViewById(R.id.imageView); int width = imageView.getDrawable().getIntrinsicWidth(); int height = imageView.getDrawable().getIntrinsicHeight(); 

La forma más sencilla es obtener el ancho y alto de un ImageView en el método onWindowFocusChanged de la actividad

  @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); height = mImageView.getHeight(); width = mImageView.getWidth(); } 

Si ha creado varias imágenes de forma dinámica, pruebe esta:

// inicializa tu matriz de imágenes

 private ImageView myImages[] = new ImageView[your_array_length]; 

// crear programáticamente y agregar a la vista principal

  for (int i = 0; i < your_array_length; i++) { myImages[i] = new ImageView(this); myImages[i].setId(i + 1); myImages[i].setBackgroundResource(your_array[i]); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( frontWidth[i], frontHeight[i]); ((MarginLayoutParams) params).setMargins(frontX_axis[i], frontY_axis[i], 0, 0); myImages[i].setAdjustViewBounds(true); myImages[i].setLayoutParams(params); if (getIntent() != null && i != your_array,length) { final int j = i; myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { myImages[j].getViewTreeObserver().removeOnPreDrawListener(this); finalHeight = myImages[j].getMeasuredHeight(); finalWidth = myImages[j].getMeasuredWidth(); your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth); return true; } }); } your_parent_layout.addView(myImages[i], params); } 

// Eso es. Feliz Codificación.

mi amigo por esto no está obteniendo la altura de la imagen almacenada en db.pero está obteniendo la altura de la vista.para obtener la altura de la imagen tiene que crear un bitmap desde la imagen de db.y que puede obtener la altura y el ancho de la imagen vista

    Intereting Posts