mipmap - ¿Cómo obtener el ancho y alto de un android.widget.ImageView?
scale image android studio (10)
╔══════════════════════════════════════════════╗ ^
║ ImageView ╔══════════════╗ ║ |
║ ║ ║ ║ |
║ ║ Actual image ║ ║ |
║ ║ ║ ║ |60px height of ImageView
║ ║ ║ ║ |
║ ║ ║ ║ |
║ ╚══════════════╝ ║ |
╚══════════════════════════════════════════════╝
<------------------------------------------------>
90px width of ImageView
Tengo una vista de imagen con un alto y ancho predeterminado, las imágenes se almacenan en db y quiero escalar la imagen de acuerdo con el ancho de altura de Imageview. Como no quiero, doy valores predeterminados porque siempre que cambio su altura y ancho también tengo que cambiarlo en el código.
Estoy intentando obtener la altura y el ancho de ImageView pero se me devuelve 0 en ambos casos.
int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();
Esto me devuelve 0, incluso tiene altura y ancho por defecto
Acabo de configurar esta propiedad y ahora el sistema operativo Android se ocupa de todo.
Android: adjustViewBounds = "true"
Use esto en su layout.xml donde ha plantado su ImageView: D
Creo que puedes dejar que el sistema operativo Android se encargue de esto por ti. Configure el tipo de escala en el ImageView para que se fitXY
a fitXY
y la imagen que se muestre se ajustará al tamaño actual de la vista.
<ImageView
android:layout_width="90px"
android:layout_height="60px"
android:scaleType="fitXY" />
La forma más sencilla es obtener el ancho y el 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();
}
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 los pasos de diseño y medida. Solo le dijo a la vista cómo se "comportaría" en el diseño, pero todavía 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?
Mi amigo por esto no está obteniendo la altura de la imagen almacenada en db.pero usted está obteniendo la altura de vista. Para obtener la altura de la imagen, debe crear un mapa de bits a partir de db, s image.y puede obtener la altura y el ancho de la imagen
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;
}
});
Luego puede agregar su trabajo de escalado de imagen desde el método onPreDraw ().
Podría obtener ancho y alto de la imagen por su dibujable;
int width = imgView.getDrawable().getIntrinsicWidth();
int height = imgView.getDrawable().getIntrinsicHeight();
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();
}
});
Si ha creado varias imágenes dinámicamente, pruebe con 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 codificacion
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();