由于加载大型位图以显示在Android设备屏幕上(正确的方式)并不是一项简单的任务,我看了一些关于如何有效地制作它的教程。我已经意识到您需要执行以下操作才能使内存高效的图像加载器方法:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true; //do that to avoid loading all the information on the heap to decode
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
根据谷歌教程,你应该制作一个样本大小的图像,直到我明白这一点,你应该做一个像这样的方法:
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
最后你调用这样的方法:
imageView.setImageBitmap(decodeSampledBitmapFromResource(getResources(), drawable.big_image, 200, 200));
这就是我怀疑的地方:如何根据设备的屏幕尺寸/分辨率了解最佳尺寸值?是否有任何方法可以嵌入到我的代码中,这些方法返回最佳屏幕分辨率以加载图像而没有像素化效果但又不会太大会炸毁VM堆?这是我现在面临的最大挑战之一。我搜索了这个link(以及其他我不记得的),但我找不到我正在寻找的答案。
答案 0 :(得分:1)
作为建议,
您可以将imageview的宽度和高度定义为。的一部分 设备宽度和高度,以像素为单位如前:
imageview width = 0.8 of device width & imageview height = 0.4 of device height
然后您可以计算设备的宽度和高度(以像素为单位)。您可以根据相关部分获得实际所需的图像视图大小。
然后您可以将计算出的imageview宽度和高度传递给" decodeSampledBitmapFromResource"方法。