はい、 を介してビットマップをロードする場合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