I'm trying to get the real size of an image displayed in an image view. Actually my image is larger than the screen and the imageview is resizing the image to diplay it. I'm looking for this new size.
I've tried to override the onDraw method of the ImageView in a custom view but I'm not getting the correct height and width...
public class LandImageView extends ImageView
{
public LandImageView( Context context )
{
super( context );
}
public LandImageView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public LandImageView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
int test = this.getWidth();
int test2 = this.getHeight();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
}
}
Do you have any clues ?
None of the answers here actually answer the question:
From a
Bitmap
of any size displayed by anImageView
, find the actual dimensions of the displayed image as opposed to the dimensions of the suppliedBitmap
.Namely:
ImageView.getDrawable().getInstrinsicWidth()
andgetIntrinsicHeight()
will both return the original dimensions.Drawable
throughImageView.getDrawable()
and casting it to aBitmapDrawable
, then usingBitmapDrawable.getBitmap().getWidth()
andgetHeight()
also returns the original image and its dimensions.The only way to get the actual dimensions of the displayed image is by extracting and using the transformation
Matrix
used to display the image as it is shown. This must be done after the measuring stage and the example here shows it called in anOverride
ofonMeasure()
for a customImageView
:Note: To get the image transformation
Matrix
from code in general (like in anActivity
), the function isImageView.getImageMatrix()
- e.g.myImageView.getImageMatrix()
If I get you correctly you need your ImageView dimension, in order to scale your image accordingly. I did this with a custom class, where I override the
onMeasure()
call to get width and height.In onMeasure you get the width and height for your image so that it fits your view.
You can use the LandImageView in your Layout like this:
I was looking for a solution to set the dimension of the image view to the scaled image to prevent empty space on top/bottom or left/right (cause the dimension of the view doesn't changed to fit the scaled image).
What I found to do the trick was using the method
mImageView.setAdjustViewBounds(true);
which results in the correct layout dimension. I don't have the scaled image dimension but I got the result I was looking for... just if someone needs it...first add the images in ur resource folder....... and in xml file create a image view....
try overriding
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
instead of onSizeChanged.How about ImageView.getBackground() or ImageView.getDrawable(), then Drawable.getBounds()?