通常加载bitmap都会把bitmap压缩后再显示,我看《Android开发艺术探索》一书中提到,用计算BitmapOptions.inSampleSize属性值的方法来压缩图片。举个例子
按照书上的方法大概就是这样的代码来计算inSampleSize的值,然后把bitmap的宽和高以inSampleSize的值等比例缩小。
然后现在有如下问题。
这里宽和高是等比例缩小的,对于imageview来说(如微信最近联系的人的头像,就是listview,recyclerview这些里面每项item中的imageview),imageview的大小应该是固定的,然而按上述这种方法缩小,宽和高,一个按inSampleSize的值缩小后仍大于图片宽或高,这自然这个方向上能填满imageview,但是另一个缩小后小于对应的imageview的宽或高,这样就会空出来一些空位。
但是我看微信这些,都是能填满的,这有什么方法呢?
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
public int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight)
{
int inSampleSize = 1;
int rawWidth = options.outWidth;
int rawHeight = options.outHeight;
while ((rawWidth / inSampleSize >= reqWidth) && (rawHeight / inSampleSize >= reqHeight))
{
inSampleSize = inSampleSize *2;
}
return inSampleSize;
}
按照书上的方法大概就是这样的代码来计算inSampleSize的值,然后把bitmap的宽和高以inSampleSize的值等比例缩小。
然后现在有如下问题。
这里宽和高是等比例缩小的,对于imageview来说(如微信最近联系的人的头像,就是listview,recyclerview这些里面每项item中的imageview),imageview的大小应该是固定的,然而按上述这种方法缩小,宽和高,一个按inSampleSize的值缩小后仍大于图片宽或高,这自然这个方向上能填满imageview,但是另一个缩小后小于对应的imageview的宽或高,这样就会空出来一些空位。
但是我看微信这些,都是能填满的,这有什么方法呢?