是的,当您通过 加载位图时BitmapFactory
,您可以使用BitmapFactory.Options
指定您只想检查位图的类型、宽度和高度:
// Read bitmap size and type only
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imagePath, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
BitmapFactory.Options 还允许您指定要加载位图的下采样版本;您所要做的就是指定 inSampleSize,它是下采样因子(使用 2 加载一半宽度和一半高度的图像——因此具有大约 1/4 的内存占用)。因此,在您的情况下,您所要做的就是根据缩略图大小计算适当的下采样因子,并加载下采样的图像:
// (continuing from previous block of code)
// Calculate downsample factor
options.inSampleSize = /* calculate downsample factor here as appropriate */
// Load a downsampled bitmap according to factor calculated above
options.inJustDecodeBounds = false;
Bitmap myBitmap = BitmapFactory.decodeResource(res, resId, options);
此外,如果您的列表滚动,那么您可能应该实施一种智能策略来释放您不再在屏幕上显示的位图。结合这种技术,这应该可以解决你的问题OutOfMemoryError
。
有关这方面的更多信息,请查看 Android Training 上的这个课程,它提供了这些(以及许多其他)实用技巧,以确保您的应用程序正确加载、显示和处理位图:
http://developer.android.com/training/displaying-bitmaps/index.html