para - manual de programacion android pdf
¿Cómo obtener las dimensiones de un dibujo en un ImageView? (5)
Esto solucionó mi problema. Decodifica el tamaño del límite de la imagen sin cargar realmente toda la imagen.
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.img , o);
int w = o.outWidth;
int h = o.outHeight;
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la mejor manera de recuperar las dimensiones del Drawable en un ImageView?
Mi ImageView tiene un método Init donde creo el ImageView:
private void init() {
coverImg = new ImageView(context);
coverImg.setScaleType(ScaleType.FIT_START);
coverImg.setImageDrawable(getResources().getDrawable(R.drawable.store_blind_cover));
addView(coverImg);
}
En algún momento durante el diseño o el proceso de medición, necesito las dimensiones exactas del Drawable para ajustar el resto de los componentes que lo rodean.
coverImg.getHeight()
y coverImg.getMeasuredHeight()
no devuelven los resultados que necesito y si uso coverImg.getDrawable().getBounds()
obtengo las dimensiones antes de que coverImg.getDrawable().getBounds()
escalara.
¡Gracias por tu ayuda!
La forma más confiable y poderosa de obtener dimensiones dibujables para mí ha sido utilizar BitmapFactory para decodificar un Bitmap. Es muy flexible: puede decodificar imágenes de un recurso, archivo u otras fuentes diferentes dibujables.
Aquí se explica cómo obtener dimensiones de un recurso dibujable con BitmapFactory:
BitmapFactory.Options o = new BitmapFactory.Options();
o.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(),
R.drawable.sample_image, o);
int w = bmp.getWidth();
int h = bmp.getHeight();
Tenga cuidado si utiliza carpetas dibujables de densidad múltiple en la resolución, y asegúrese de especificar inTargetDensity en su BitmapFactory.Options para obtener la densidad que desea dibujar.
Llame a getIntrinsicHeight y getIntrinsicWidth en el dibujo.
public int getIntrinsicHeight ()
Desde: API Nivel 1
Devuelve la altura intrínseca del objeto dibujable subyacente. Devuelve -1 si no tiene una altura intrínseca, como con un color sólido.
public int getIntrinsicWidth ()
Desde: API Nivel 1
Devuelve el ancho intrínseco del objeto dibujable subyacente.
Devuelve -1 si no tiene ancho intrínseco, como con un color sólido.
http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()
Este es el tamaño del dibujo original. Creo que esto es lo que quieres.
Manera eficiente de obtener Ancho y Altura de Dibujar :
Drawable drawable = getResources().getDrawable(R.drawable.ic_home);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Log.i("Drawable dimension : W-H", width+"-"+height);
Espero que esto te ayudará.
Solo probé esto y funciona para mí:
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() {
// Remove after the first run so it doesn''t fire forever
iv.getViewTreeObserver().removeOnPreDrawListener(this);
finalHeight = iv.getMeasuredHeight();
finalWidth = iv.getMeasuredWidth();
tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
return true;
}
});
ViewTreeObserver
le permitirá monitorear el diseño justo antes de dibujarlo (es decir, ya se ha medido todo) y desde aquí puede obtener las mediciones escaladas de ImageView
.