Hope following solution helps.
You can make your imageView of fixed size and pass that imageView's width and height to calculateInSampleSize
method. Based on image size, it will decide whether to down sample the image or not.
public Bitmap getBitmap(Context context, final String imagePath)
{
AssetManager assetManager = context.getAssets();
InputStream inputStream = null;
Bitmap bitmap = null;
try
{
inputStream = assetManager.open(imagePath);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = true;
options.inJustDecodeBounds = true;
// First decode with inJustDecodeBounds=true to check dimensions
bitmap = BitmapFactory.decodeStream(inputStream);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, requiredWidth, requiredHeight);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(inputStream);
}
catch(Exception exception)
{
exception.printStackTrace();
bitmap = null;
}
return bitmap;
}
public int calculateInSampleSize(BitmapFactory.Options options, final int requiredWidth, final int requiredHeight)
{
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if(height > requiredHeight || width > requiredWidth)
{
if(width > height)
{
inSampleSize = Math.round((float)height / (float)requiredHeight);
}
else
{
inSampleSize = Math.round((float)width / (float)requiredWidth);
}
}
return inSampleSize;
}