2011-09-01 62 views
9

我有一个简单的问题:我应该调整一个更大的位图之前 添加到ImageView或让ImageView调整位图? 什么是正确的方式,关于性能?我应该在添加到ImageView之前调整位图大小还是让ImageView调整位图大小?

感谢

+0

你缩放到一个固定的像素大小(即,. PX),或密度/规模的独立(即DP/SP)的大小? –

+0

要蘸的。我忘记说Bitmap只比ImageViews的高度/宽度大一点,大约10%。 – Benjamin

+0

如果它只是更大一点,只需使用'setScaleType'。如果它的数量级要大一些,我建议在加载过程中/之后缩小原始大小。 – Dave

回答

11

考虑使用刻度ImageView的,不要理会调整。您可以缩放图像这样的,例如:

image.setAdjustViewBounds(true); 
image.setMaxHeight(50); 
image.setMaxWidth(50); 
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
+0

如果图像是1000 x 1000,并且您想要它为50x50,这真的是最好的方法吗?对我来说似乎没有效率。 – Ricky

+0

好,如果你裁剪图像或调整大小,你可能会失去它的质量,所以缩放是最好的方式来做到这一点,并保持高质量。 – Arkde

1

更大的图像,更大的尺寸,我不认为性能真的会受到影响,但使事情变得高效。

您也可以放置在不同的文件夹不同大小的图像不同分辨率:

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 

Supporting different size screens

1

我们可以调整现有的位图使用bitmap.createScaledBitmap使用下面的代码的任何尺寸。

bmp=Bitmap.createScaledBitmap(bmp,destBitmapWith, destBitmapHeight,true); 
+0

正是我在寻找的BitmapFactory返回不可变的位图。 –

1

你可以这样做:

ImageView imageView = (ImageView) findViewById(R.id.imageView); 
     imageView.setAdjustViewBounds(true); 
     imageView.setMaxHeight(imageView.getHeight()); 
     imageView.setMaxWidth(imageView.getWidth()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));