android 高效加载大图
在写代码的时候就已经解释:
/** * 计算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!