Cómo obtener el ancho y la altura de un android.widget.ImageView?

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

Tengo una visión de la imagen con una cierta altura y una anchura por defecto, las imágenes se almacenan en db y quiero escalar la imagen según el ancho de la altura de Imageview. Como no quiero dar valores predeterminados porque cuando alguna vez lo cambio es altura y ancho también tengo que cambiarlo en código.

Estoy intentando conseguir la altura y la anchura de ImageView pero 0 se me vuelve en ambos casos.

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

Esto me devuelve 0 incluso tiene altura por defecto y el ancho

Mi respuesta a 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; } }); 

A continuación, puede agregar el trabajo de escala de imagen desde el método onPreDraw ().

Acabo de configurar esta propiedad y ahora Android OS se ocupa de todo.

Android: adjustViewBounds = "true"

Utilícelo en el layout.xml en el que ha plantado ImageView: D

Podría conseguir el ancho y la altura de la imagen por su drawable;

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

La razón por la cual las dimensiones de ImageView son 0 es que cuando las está consultando, la vista todavía no ha realizado los pasos de diseño y medida. Sólo le dijiste a la vista cómo se "comportaría" en el diseño, pero todavía no calculó dónde colocar cada vista.

¿Cómo se decide el tamaño a dar a la vista de la imagen? ¿No puedes simplemente usar una de las opciones de escalado implementadas nativamente?

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 puede dejar que el sistema operativo Android cuide de esto para usted. Establezca el tipo de escala en el ImageView a fitXY y la imagen que muestre será dimensionada para ajustarse al tamaño actual de la vista.

 <ImageView android:layout_width="90px" android:layout_height="60px" android:scaleType="fitXY" /> 

Su archivo xml:

  <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/image" android:scaleType="fitXY" android:adjustViewBounds="true"/> 

Su archivo java:

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

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 programaticamente y añadir 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. Codificación feliz.

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

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

Mi amigo por este u no están consiguiendo altura de la imagen almacenada en db.but usted está consiguiendo height.for de la visión que consigue la altura de la imagen u tiene que crear el mapa de bits de db, s image.and que u puede buscar altura y anchura de imageview

  • Android: Drawable no aparece
  • Android: ¿Cómo comparar el recurso de una imagen con R.drawable.imagename?
  • Botón de la imagen de androide
  • Cómo obtener el nombre de la imagen de ImageView en Android?
  • Compartir imágenes de Android de la carpeta de activos
  • Android: ¿Cómo llamar a onTouch sólo después de un onLongClick?
  • Procesamiento de imágenes en android con escala de estiramiento y efecto Twist
  • Android - cómo configurar la imagen de fondo de pantalla
  • Transparencia de la imagen de Android
  • Fondo de pantalla en vivo con imágenes
  • Cómo convertir el mapa de bits a dibujo a lápiz en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.