高效的加载Bitmap
2016-08-08 14:52
246 查看
在Android开发中我们经常需要加载一个Bitmap到ImageView 中,而图片的大小往往不是期望的ImageView的大小。如果我们不对需要加载的图片进行优化加载,那这样就白白浪费了许多内存资源,作为一个Android开发者我们是坚决不能容许这种事情发生的。
下面我就给大家讲讲高效加载Bitmap的四步:1. 计算出我们需要的ImageView显示的大小
如果是固定好大小的如 宽高都是100dp之类的那就很简单了,直接获取imageView的宽和高
int width=imageView.getWidth(); int height=imageView.getHeight();
如果不是固定的大小 控件宽高是warp_content或者是match_parent
那就稍微复杂点
DisplayMetrics displayMetrics=imageView.getContext().getResources().getDisplayMetrics(); ViewGroup.LayoutParams layoutParams=imageView.getLayoutParams(); int width=imageView.getWidth(); if(width<=0){ width=layoutParams.width; } //通过反射获取宽度的最大值 if(width<=0){ width=getImageViewFieldValue(imageView,"mMaxWidth"); } //获取屏幕的宽度 if(width<=0){ width=displayMetrics.widthPixels; } int height=imageView.getHeight(); if(height<=0){ height=layoutParams.height; } //通过反射获取高度的最大值 if(height<=0){ height=getImageViewFieldValue(imageView,"mMaxHeight"); } //获取屏幕的宽度 if(height<=0){ height=displayMetrics.heightPixels; }
当我们在计算控件的宽高时如果一直就获取不到,那只能用屏幕的宽高作为压缩比例 这也是没有办法的办法了
2. 在不加载图片的情况下获取图片的宽和高
//获取图片的宽和高,并不把图片加载到内存中 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); options.inSampleSize = caculateInSampleSize(options, width, height);
3. 根据需求的宽和高以及图片实际的宽和高计算SampleSize
private int caculateInSampleSize(BitmapFactory.Options options, int reqwidth, int reqheight) { int width = options.outWidth; int hegiht = options.outHeight; int inSampleSize = 1; if (width > reqwidth || hegiht > reqheight) { int widthRadio = Math.round(width * 1.0f / reqwidth); int heightRadio = Math.round(hegiht * 1.0f / reqheight); inSampleSize = Math.max(widthRadio, heightRadio); } return inSampleSize; }
4. 使用获取到的InSampleSize再次加载图片
//使用获取到的InSampleSize再次解析图片 options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(path, options);
好了 到这里我们就获取到了 我们所期望的Bitmap 高效加载bitmap就这样完成了 是不是很简单呢 赶快动手试一下吧
相关文章推荐
- 高效使用Bitmaps(一) 大Bitmap的加载
- Bitmap高效加载、Cache和优化(一)
- Bitmap的高效加载,避免内存溢出
- 【Google官方教程】第一课:高效地加载大Bitmap(位图)
- Android进阶练习 - 高效显示Bitmap(高效加载较大的 Bitmaps)
- Bitmap高效加载图片
- 浅析KJFrameForAndroid框架如何高效加载Bitmap
- 第一课:高效地加载大Bitmap(位图)
- 高效显示Bitmap(一) 高效加载大图
- Android开发中Bitmap高效加载使用详解
- 高效使用Bitmaps(二) 后台加载Bitmap
- Bitmap的高效加载
- Android高效加载Bitmap
- 关于android示例程序(bitmapfun)——高效加载图片的缺陷
- Android中的Bitmap的高效加载介绍
- 高效地加载大Bitmap(位图)
- KJFrameForAndroid框架学习----高效加载Bitmap
- Android开发艺术探索------Bitmap的高效加载
- Android学习路线(三十一)高效地加载大的Bitmap