首先 图片的选取
icon应该是png
view pager、recycler view中的图应该是jpg
其次让图片的尺寸缩放成ImageView的尺寸,实现资源的节约
1.
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(context.getResources(), resId, options);
这样做会仅仅加载图片的宽高到内存中
2.
int inSampleSize = 1; int width = options.outWidth; int height = options.outHeight; if (width > wantWidth || height > wantHeight) { int halfWidth = width / 2; int halfHeight = height / 2; while (halfWidth / inSampleSize >= wantWidth && halfHeight / inSampleSize >= wantHeight) { inSampleSize *= 2; } }宽高就被保存在了options.outWidth;options.outHeight;里。我们再根据image view的宽高计算出缩放比例
3.
options.inSampleSize = inSampleSize; options.inJustDecodeBounds = false;
缩放比例赋给inSampleSize
然后inJustDecodeBounds代表实际加载
这样一来 就会加载出一个 缩放后的bitmap到内存中
方法如下
public class BitmapUtils { public static Bitmap getGoodBitmap(Context context, int resId, int wantWidth, int wantHeight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(context.getResources(), resId, options); int inSampleSize = 1; int width = options.outWidth; int height = options.outHeight; if (width > wantWidth || height > wantHeight) { int halfWidth = width / 2; int halfHeight = height / 2; while (halfWidth / inSampleSize >= wantWidth && halfHeight / inSampleSize >= wantHeight) { inSampleSize *= 2; } } options.inSampleSize = inSampleSize; options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(context.getResources(),resId,options); } }
注意 你传入的参数,应该是你经过测绘出的get width、get height,这样获取出来的才是px(像素)。布局文件中指定的是dp,在不同的手机上会进行不同的换算,不能作为参考的标准。