我正在从磁盘读取图像,并将其显示在
现在我正在使用以下代码读取文件:
我该如何从
ListView
的一行中。图像文件比需要在行的ImageView
内显示的图像大。由于我需要将位图
缓存在RAM中以加快访问速度,因此我希望它们只有ImageView
s的大小(85x85 dip)。现在我正在使用以下代码读取文件:
并且bitmap = BitmapFactory.decodeFile(file);
ImageView
负责缩放和裁剪它。
据我所知,这会使整个位图保留在内存中(因为我已经缓存了它),这是不好的。android:scaleType="centerCrop"
我该如何从
ImageView
中移除这个职责并在加载文件时进行裁剪+缩放?所有位图都将以85x85 dip显示,并需要进行'centerCrop'处理。
inSampleSize
没有起到任何作用。它需要设置为 > 1 才能起作用,最好是2的幂次方。关于inSampleSize
的更多信息,请参见:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize 至于裁剪,我仍然希望自己来处理,而不是让ImageView
来处理,否则就会浪费内存。 - smith324inJustDecodeBounds
?根据我所了解的,它会分配内存但不会实际加载位图。这有什么用处呢?是因为调用更快吗? - smith324BaseAdapter
的工作方式是,所有的ImageViews
在屏幕上显示时必须是相同的大小(出于设计选择),因此需要进行整个裁剪操作。例如,如果一张图片是竖直的,我需要对其进行裁剪而不是缩放(使其拉伸得很奇怪),以便所有的图片都是完美的正方形。目前centerCrop
可以实现这一点,所以我会保持我的实现方式不变。 - smith324