Problem occurs while using high resolution image in device.
imageview a;
InputStream ims = getAssets().open("sam.png");//sam.png=520*1400 device=320*480 or 480*800
Drawable d=Drawable.createFromStream(ims, null);
a.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
a.setImageDrawable(d);
by using above code image leaves spaces on top and bottom to next contents or If I shrink an image by giving fixed px, its get blur image on its size. Anyway to solve this issue?
Try to create Bitmap instead of Drawable:
Bitmap bmp = BitmapFactory.decodeStream(ims);
a.setImageBitmap(bmp);
Looks like Android doing some tricks with drawables, depending of screen density.
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;
}
来源:https://stackoverflow.com/questions/11949234/androidissue-image-resolution