0

我正在使用 ViewPager 创建我自己的画廊,它“连接”到 ArrayList 保存要显示的图像路径。

到目前为止,我使用:

Bitmap bitmap = BitmapFactory.decodeFile(path);
imageView.setImageBitmap(bitmap);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

它工作正常,但图片非常大,我不必要地解码整个图片,因为它后来按比例缩小以适应布局。当我快速滚动时,它很慢,有时会发生 OutOfMemoryError 崩溃。

所以问题是:如何有效地解码图像,使其 100% 适合 ImageView.ScaleType.CENTER_INSIDE 只知道它的路径?

4

1 回答 1

3

不要直接解码。使用inJustDecodeBounds = truefrom BitmapFactory.Options, 仅从位图中加载宽度和高度。然后你可以计算inSampleSize缩放你的Bitmap

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);

decodeFile 将返回 null 并且 options 将包含widthand height。然后你计算inSampleSize和:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = myInsampleSize;
Bitmap output = BitmapFactory.decodeFile(path, options);
于 2013-07-18T12:58:31.317 回答