1.图片内存溢出
默认情况下,每个android程序的dailvik虚拟机的最大堆空间大小为16M
当加载的图片太多或图片过大时经常出现OOM问题
android 中用bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError
2.解决办法
public Bitmap matrixBitmapSize(Bitmap bitmap, int screenWidth, int screenHight) { //获取当前bitmap的宽高 int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); float scale = (float) screenWidth / w; float scale2 = (float) screenHight / h; // 取比例小的值 可以把图片完全缩放在屏幕内 scale = scale < scale2 scale : scale2; // 都按照宽度scale 保证图片不变形.根据宽度来确定高度 matrix.postScale(scale, scale); // w,h是原图的属性. return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); } public Bitmap optionsBitmapSize(String imagePath, int screenWidth, int screenHight) { // 设置解析图片的配置信息 BitmapFactory.Options options = new Options(); // 设置为true 不再解析图片 只是获取图片的头部信息及宽高 options.inJustDecodeBounds = true; // 返回为null BitmapFactory.decodeFile(imagePath, options); // 获取图片的宽高 int imageWidth = options.outWidth; int imageHeight = options.outHeight; // 计算缩放比例 int scaleWidth = imageWidth / screenWidth; int scaleHeight = imageHeight / screenHight; // 定义默认缩放比例为1 int scale = 1; // 按照缩放比例大的 去缩放 if (scaleWidth > scaleHeight & scaleHeight >= 1) { scale = scaleWidth; } else if (scaleHeight > scaleWidth & scaleWidth >= 1) { scale = scaleHeight; } // 设置为true开始解析图片 options.inJustDecodeBounds = false; // 设置图片的采样率 options.inSampleSize = scale; // 得到按照scale缩放后的图片 Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); return bitmap; }