android 高效加载大图

时间:2023-02-01 20:53:56

在写代码的时候就已经解释:

    /**
* 计算samplesize的大小
*
@param options 传一个BitmapFactory.Options 进去获取图片的大小和类型
*
@param viewWidth imageview的大小 宽
*
@param viewHight imageview的大小 长
*
@return 返回samplesize
*/
private static int caculateSampleSize(BitmapFactory.Options options, int viewWidth, int viewHight){
final int imageWidth = options.outWidth;
final int imageHight = options.outHeight;
int sampleSize = 1;
if (imageWidth > viewWidth || imageHight > viewHight){
final int halfImageWidth = imageWidth/2;
final int halfImageHight = imageHight/2;
while (halfImageHight/sampleSize>viewHight || halfImageWidth/sampleSize>viewWidth){
sampleSize
*= 2;
}
}
return sampleSize;
}

 

    /**
*通过资源图片设置好缩略图片
*
@param res 资源图片
*
@param resId 图片id
*
@param viewWidth imageview控件宽
*
@param viewHight imageview控件长
*
@return 返回一个位图
*/
private static Bitmap decodeSampleBitmapFromResources(Resources res,int resId,int viewWidth,int viewHight){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds
= true;
BitmapFactory.decodeResource(res, resId, options);
//设置缩小的尺寸
options.inSampleSize = caculateSampleSize(options,viewWidth,viewHight);
options.inJustDecodeBounds
= false;
return BitmapFactory.decodeResource(res, resId, options);
}

然后调用就行了。

 

imageView.setImageBitmap(decodeSampleBitmapFromResources(getResources(),R.mipmap.image_111,imageView.getMaxWidth(),imageView.getMaxHeight()));

 

 

最后给出一个  得到图片资源的大小和类型的方法:

    /**
* 获得 图片 resId 的尺寸大小和类型
*
@param resId 图片资源的ID
*/
private void setOpitions(int resId){
BitmapFactory.Options options
= new BitmapFactory.Options();
//设置 inJustDecodeBounds 属性为true可以在解码的时候避免内存的分配,它会返回一个null的Bitmap,但是可以获取到 outWidth, outHeight 与 outMimeType。
options.inJustDecodeBounds = true;
//BitmapFactory.decodeResource(res,int res id,options);获得图片资源的一系列信息
BitmapFactory.decodeResource(getResources(),resId,options);
//图片资源的长宽和图片类型
int imageWidth = options.outWidth;
int imageHight = options.outHeight;
String imageType
= options.outMimeType;
}

 

over!