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.
- Android: girar un ImageView con el dedo mueve otras vistas alrededor
- Android - Escala de botones de imagen
- Cargar una imagen de la carpeta de activos
- Rotar imagen sin encogerse en Android
- Diferencia entre los formatos de imagen RGB888 y ARGB8888
int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();
Esto me devuelve 0 incluso tiene altura por defecto y el ancho
- ¿Cómo distorsionar una imagen a cualquier cuadrángulo?
- Android y Facebook: Cómo obtener la imagen del usuario registrado
- Menú contextual para guardar imágenes en una vista web de Android
- Cómo obtener el ancho y la altura de la imagen mostrada en android?
- Java (Android) Insertar icono en lienzo
- Imagen de Android vista de la gravedad
- Android: mostrar imágenes en la vista Web
- Buscar la posición de ImageView en relación con la imagen que está mostrando
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
- "No se puede resolver el símbolo R" en Android Studio
- La aplicación puede estar haciendo demasiado trabajo en su hilo principal