我正在从磁盘读取图像并在ListView
的行中显示它。图像文件大于需要在行的ImageView
内显示的图像文件。由于我需要将bitmaps
缓存在RAM中以便更快地访问,我希望它们只能与ImageView
s(85x85 dip)一样大
现在我正在使用
阅读文件bitmap = BitmapFactory.decodeFile(file);
并且ImageView负责缩放和裁剪
机器人:scaleType = “centerCrop”
AFAIK这会将整个位图保留在内存中(因为我将其缓存为XD)并且这很糟糕
如何从ImageView中删除此责任并在加载文件时执行裁剪+缩放?所有位图都将以85x85倾角显示,需要为'centerCrop'
答案 0 :(得分:5)
您可以在加载,裁剪和缩放之前找到图片的尺寸:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
然后加载样本大小:
...
options.inSampleSize = 1/2;
bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
...
= Bitmap.createScaledBitmap(bmo, dW, dH, false);
不要忘记回收临时位图,否则你会得到OOME。
bmo.recycle();